Leetcode 面試題 02.01.移除重複節點
1 題目描述(Leetcode題目鏈接)
編寫代碼,移除未排序鏈表中的重複節點。保留最開始出現的節點。
輸入:[1, 2, 3, 3, 2, 1]
輸出:[1, 2, 3]
輸入:[1, 1, 1, 1, 2]
輸出:[1, 2]
提示:
- 鏈表長度在[0, 20000]範圍內。
- 鏈表元素在[0, 20000]範圍內。
進階:如果不得使用臨時緩衝區,該怎麼解決?
2 題解
用一個集合維護已經出現過的數字。如果不用集合,那就用雙指針實現。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeDuplicateNodes(self, head: ListNode) -> ListNode:
seen = set()
dummy = ListNode(-1)
dummy.next = head
p = dummy
while p and p.next:
if p.next.val in seen:
p.next = p.next.next
else:
seen.add(p.next.val)
p = p.next
return dummy.next