由于该题只需要将链表中多余的重复节点删除,而不是将重复的节点全部删除,所以可以通过定义一个字典,并将原链表的值存入该字典中,然后对原链表进行循环遍历,将重复的值剔除,不重复的值存入一个新的链表,最后将新链表输出即可。
解析代码如下:
# 资源包\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)
还没有评论,来说两句吧...