"""
方法二:递归法
主要思路为 : 对于结点 cur,首先递归地删除以 cur.next 为首的子链表中重复的结点,接
着从以 cur.next 为首的子链表中找出与 cur 有着相同数据域的结点井删除,
"""classLNode:def__init__(self):
self.data =None# 数据域
self.next=None# 指针域defremoveDupRecursion(head):if head.nextisNone:return head
pointer =None
cur = head
# 对以 head.next 为首的子链表删除重复的结点
head.next= removeDupRecursion(head.next)
pointer = head.next# 找出以 head.next 为首的子链表中与 head 结点相同的结点并删除while pointer isnotNone:if head.data == pointer.data:
cur.next= pointer.next
pointer= cur.nextelse:
pointer = pointer.next
cur = cur.nextreturn head
defremoveDup(head):"""
方法功能:对带头结点的单链删除重复结点输入参数: head:链表头结点
"""if(head isNone):return
head.next= removeDupRecursion(head.next)if __name__ =='__main__':
i =1
head = LNode()
tmp =None
cur = head
while i <7:
tmp = LNode()if i %2==0:
tmp.data = i +1elif i %3==0:
tmp.data = i -2else:
tmp.data = i
cur.next= tmp
cur = tmp
i +=1print('删除重复结点前:', end=' ')
cur = head.nextwhile cur !=None:print(cur.data, end=' ')
cur = cur.next
removeDup(head)print('删除重复结点后:', end=' ')
cur = head.nextwhile cur !=None:print(cur.data, end=' ')
cur = cur.next
"""
方法三:空间换时间
通常情况下,为了降低时间复杂度,往往在条件允许的情况下,通过使用辅助空间来实
现。具体而言,主要思路为 :
( 1 )建立一个 HashSet, HashSet 中的内容为己经遍历过的结点内容,并将其初始化为空。
(2 )从头开始遍历链表中的所有结点,存在以下两种可能性 :
1) 如果结点内 容已经在 HashSet 中,那么删除此结点,继续向后遍历。
2 )如果结点内容不在 Hash Set 中,那么保留此结点,将此结点内容添加到 Hash Set 中,
继续向后遍历。
"""classLNode(object):def__init__(self, item):
self.data = item
self.next=NonedefremoveDup(head):if head ==Noneor head.next==None:return
cur = head.next
pre =None
hash_list =list()while cur !=None:if cur.data in hash_list:
pre.next= cur.next
cur = pre.nextelse:
hash_list.append(cur.data)
pre = cur
cur = cur.nextif __name__ =="__main__":
i =1
head = LNode(0)
head.next=None
tmp =None
cur = head
while i <7:
tmp = LNode(i)if i%2==0:
tmp.data = i+1elif i%3==0:
tmp.data = i-2else:
tmp.data = i
tmp.next=None
cur.next= tmp
cur = tmp
i +=1print("删除重复节点前:",end=" ")
cur = head.nextwhile cur !=None:print(cur.data,end=" ")
cur = cur.next
removeDup(head)print("删除节点后:",end=" ")
cur = head.nextwhile cur !=None:print(cur.data,end=" ")
cur = cur.next