题目:
给定一个无序单链表的头节点head,删除其中值重复出现的节点。
请按以下要求实现两种方法。
- 方法一。时间复杂度O(N)
- 方法二。空间复杂度O(1)
基本思路
方法一。利用哈希表,依次遍历每一个节点,如果这个节点的值已经存在于哈希表中,将该节点删除;否则,将该节点的值添加到哈希表中。代码实现如下:
class node:
def __init__(self,value):
self.value = value
self.next = None
def removeRepeatNode(head):
if head == None:
return head
hashSet = set()
pre = head
cur = head.next
hashSet.add(head.value)
while cur!=None:
if cur.value in hashSet:
pre.next = cur.next
else:
hashSet.add(cur.value)
pre = cur
cur = cur.next
方法二。时间复杂度O(N2N2),空间复杂度O(1)。
遍历每一个节点,假设遍历到位置i,从i位置开始遍历之后所有的节点,把值相同的节点的删除。代码实现如下:
def removeRepeatNode2(head):
if head == None:
return
cur = head
while cur!=None:
pre = cur
next_ = cur.next
while next_!=None:
if cur.value == next_.value:
pre.next = next_.next
else:
pre = next
next_ = next_.next
cur = cur.next