leetcode 面試題02.01 移除重複節點

題目

編寫代碼,移除未排序鏈表中的重複節點。保留最開始出現的節點。
示例1:

輸入:[1, 2, 3, 3, 2, 1]
輸出:[1, 2, 3]

示例2:

輸入:[1, 1, 1, 1, 2]
輸出:[1, 2]
提示:

鏈表長度在[0, 20000]範圍內。
鏈表元素在[0, 20000]範圍內。
進階:
如果不得使用臨時緩衝區,該怎麼解決?

來源:力扣(LeetCode)
鏈接:https://leetcode-cn.com/problems/remove-duplicate-node-lcci

分析

腦子第一個想法,果斷是一個map一把擼。這樣是一個空間複雜度O(N)的解法,爲了更節約內存,我們使用go語言的空結構體struct{},這樣就是一個簡單的set了。

解法

/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func removeDuplicateNodes(head *ListNode) *ListNode {
    if head ==  nil {
        return head
    }
    var m = make(map[int]struct{})
    mHead := &ListNode{
        Next:head,
    }
    pre, cur := mHead, mHead.Next
    for cur != nil {
        if _, ok := m[cur.Val]; ok {
            pre.Next = cur.Next
        } else {
            m[cur.Val] = struct{}{}
            pre = cur
        }
        cur = cur.Next
    }

    return mHead.Next
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章