由于该题只需要将链表中多余的重复节点删除,而不是将重复的节点全部删除,所以可以通过定义一个字典,并将原链表的值存入该字典中,然后对原链表进行循环遍历,将重复的值剔除,不重复的值存入一个新的链表,最后将新链表输出即可。
解析代码如下:
# 资源包\Code\chapter19\1935.py
# 链表的节点
class LinkedNode:
def __init__(self, val):
self.val = val
self.next = None
def deleteDuplicationNode(curLinkedHead):
# 定义空字典,用于存放链表中节点的值
nodeValues = {}
# 定义新链表的头节点
newLinkedHead = LinkedNode(curLinkedHead.val)
# 初始化新链表的当前节点
newLinkedcurNode = newLinkedHead
# 将当前链表中头节点的值存入字典
nodeValues[curLinkedHead.val] = curLinkedHead.val
# 遍历当前链表中头节点的下一个节点
while curLinkedHead.next:
# 将下一次遍历的节点换为当前链表的下一个节点
curLinkedHead = curLinkedHead.next
# 如果当前链表中下一个节点的值在字典中不存在,则证明当前链表的下一个节点的值和当前节点的值不重复
if nodeValues.get(curLinkedHead.val) == None:
# 新链表头节点的下一个节点指向当前链表的节点
newLinkedcurNode.next = LinkedNode(curLinkedHead.val)
# 新链表的当前节点为新链表的下一个节点
newLinkedcurNode = newLinkedcurNode.next
# 将当前链表的节点的值存入字典
nodeValues[curLinkedHead.val] = curLinkedHead.val
# 返回新链表的头节点
return newLinkedHead
# 创建链表
node1 = LinkedNode(5)
node2 = LinkedNode(5)
node3 = LinkedNode(10)
node4 = LinkedNode(4)
node5 = LinkedNode(7)
node6 = LinkedNode(7)
node1.next = node2
node2.next = node3
node3.next = node4
node4.next = node5
node5.next = node6
# 打印链表
def printLinked(header):
node = header
while node:
print(node.val)
node = node.next
header = deleteDuplicationNode(node1)
printLinked(header) 



还没有评论,来说两句吧...