📅  最后修改于: 2023-12-03 15:41:41.672000             🧑  作者: Mango
在处理链表时,一种常见的问题是查找并删除链表中的重复项。这通常需要在链表的每个节点之间进行比较。本文将介绍如何计算给定链表中的重复项。
给定一个链表,计算其中重复项的个数。
算法的关键在于如何确定哪些元素是重复的。我们可以使用哈希表来存储链表中出现过的元素,以此判断是否重复。
具体实现如下:
def count_duplicates(head):
"""
计算链表中的重复项数量
"""
if not head:
return 0
# 建立哈希表
hash_map = {}
cur = head
while cur:
if cur.val in hash_map:
hash_map[cur.val] += 1
else:
hash_map[cur.val] = 1
cur = cur.next
# 统计重复项的数量
count = 0
for val in hash_map.values():
if val > 1:
count += 1
return count
我们可以写一些测试用例,检验代码的正确性。
例如,给出以下链表:
1 -> 2 -> 3 -> 2 -> 1 -> 4
链表中有两个重复项,分别是1和2,因此应该返回2。
class Node:
def __init__(self, val=0):
self.val = val
self.next = None
# 创建链表
head = Node(1)
head.next = Node(2)
head.next.next = Node(3)
head.next.next.next = Node(2)
head.next.next.next.next = Node(1)
head.next.next.next.next.next = Node(4)
# 测试
assert count_duplicates(head) == 2
测试通过。
本文介绍了如何计算给定链表中的重复项。使用哈希表存储链表中的元素可以快速地解决这个问题。