class LNode:
def __init__(self):
self.data = None # 数据域
self.next = None # 指针域
"""
*** 方法功能:对带头结点的无序单链表删除重复的结点
*** 输入参数:head:链表头结点
"""
def removeDup(head):
if head == None or head.next == None:
return
outerCur = head.next # 用于外层循环,指向链表第一个结点
innerCur = None # 用于内层循环来遍历outerCur后面的结点
innerPre = None # innerCur的前驱结点
while outerCur != None:
innerCur = outerCur.next
innerPre = outerCur
while innerCur != None:
# 找到重复的结点并删除
if outerCur.data == innerCur.data:
innerPre.next = innerCur.next
innerCur = innerCur.next
else:
innerPre = innerCur
innerCur = innerCur.next
outerCur = outerCur.next
if __name__ == '__main__':
i = 1
head = LNode()
tmp = None
cur = head
while i < 7:
tmp = LNode()
if i % 2 == 0:
tmp.data = i + 1
elif i % 3 == 0:
tmp.data = i - 2
else:
tmp.data = i
cur.next = tmp
cur = tmp
i += 1
print('删除重复结点前:', end=' ')
cur = head.next
while cur != None:
print(cur.data, end=' ')
cur = cur.next
removeDup(head)
print('删除重复结点后:', end=' ')
cur = head.next
while cur != None:
print(cur.data, end=' ')
cur = cur.next
运行结果如下:
删除重复结点前: 1 3 1 5 5 7 删除重复结点后: 1 3 5 7