LeetCode----Remove Duplicates from Sorted List II
1298 ワード
Remove Duplicates from Sorted List II
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example, Given
分析:
チェーンテーブルの重複するすべての要素を削除します.
コレクションを使用して、重複したすべての要素を記録し、チェーンテーブルを再度巡回し、重複したコレクション内のノードに新しいチェーンテーブルを追加しません.時間複雑度はO(n),空間もO(n)であった.
もちろん、繰り返しではない要素を毎回探し出し、新しいチェーンテーブルを追加することで、空間はO(1)を満たすが、時間はO(n^2)である.
コード:
Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example, Given
1->2->3->3->4->4->5
, return 1->2->5
. Given 1->1->1->2->3
, return 2->3
. 分析:
チェーンテーブルの重複するすべての要素を削除します.
コレクションを使用して、重複したすべての要素を記録し、チェーンテーブルを再度巡回し、重複したコレクション内のノードに新しいチェーンテーブルを追加しません.時間複雑度はO(n),空間もO(n)であった.
もちろん、繰り返しではない要素を毎回探し出し、新しいチェーンテーブルを追加することで、空間はO(1)を満たすが、時間はO(n^2)である.
コード:
class Solution(object):
def removeElements(self, head, val):
"""
:type head: ListNode
:type val: int
:rtype: ListNode
"""
p = head
v = set() # record all the values
d = set() # record only the duplicate values
while p:
if p.val not in v:
v.add(p.val)
else:
d.add(p.val)
p = p.next
p = head
r = q = ListNode(-1)
while p:
if p.val not in d:
q.next = p
q = q.next
p = p.next
q.next = None
return r.next