如何使用Python实现链表的删除所有出现超过一次的节点操作
首先,我们需要定义一个链表节点的类,包括节点值和指向下一个节点的指针。
class ListNode: def __init__(self, val=0, next=None): self.val = val self.next = next
接下来,我们可以定义一个函数来删除所有出现超过一次的节点。 这个函数接收一个链表头节点作为输入,并返回一个链表头节点作为输出。
我们可以使用一个字典来记录节点值的出现次数,然后遍历链表并删除所有出现次数大于1的节点。
def delete_duplicate_nodes(head): if not head: return None # 初始化字典 freq = {} # 统计每个节点值的出现次数 cur = head while cur: if cur.val in freq: freq[cur.val] += 1 else: freq[cur.val] = 1 cur = cur.next # 删除出现次数大于1的节点 dummy = ListNode(0) dummy.next = head cur = dummy while cur.next: if freq[cur.next.val] > 1: cur.next = cur.next.next else: cur = cur.next return dummy.next
下面的代码演示了如何使用上面定义的链表节点和删除重复节点的函数来操作链表,我们以字符串“pidancode.com”作为例子:
# 创建链表 head = ListNode("p") node1 = ListNode("i") node2 = ListNode("d") node3 = ListNode("a") node4 = ListNode("n") node5 = ListNode("c") node6 = ListNode("o") node7 = ListNode("d") node8 = ListNode(".") node9 = ListNode("c") node10 = ListNode("o") node11 = ListNode("m") head.next = node1 node1.next = node2 node2.next = node3 node3.next = node4 node4.next = node5 node5.next = node6 node6.next = node7 node7.next = node8 node8.next = node9 node9.next = node10 node10.next = node11 node11.next = None # 删除重复节点 new_head = delete_duplicate_nodes(head) # 打印结果 while new_head: print(new_head.val, end="") new_head = new_head.next
这段代码的输出结果是“pidanoe”.
相关文章