📜  计算给定链表中的重复项(1)

📅  最后修改于: 2023-12-03 15:41:41.672000             🧑  作者: Mango

计算给定链表中的重复项

在处理链表时,一种常见的问题是查找并删除链表中的重复项。这通常需要在链表的每个节点之间进行比较。本文将介绍如何计算给定链表中的重复项。

题意

给定一个链表,计算其中重复项的个数。

算法

算法的关键在于如何确定哪些元素是重复的。我们可以使用哈希表来存储链表中出现过的元素,以此判断是否重复。

具体实现如下:

  1. 定义一个哈希表,key为链表中的元素,value为出现的次数;
  2. 遍历链表,将遍历到的元素存入哈希表中;
  3. 遍历哈希表中的value,统计出现次数大于1的元素数量,即为重复项的个数。
代码实现
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

测试通过。

总结

本文介绍了如何计算给定链表中的重复项。使用哈希表存储链表中的元素可以快速地解决这个问题。