📌  相关文章
📜  用于从未排序的链表中删除重复项的Java程序(1)

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

用于从未排序的链表中删除重复项的Java程序

这是一个Java程序,用于从未排序的链表中删除重复项。该程序将通过遍历链表来找到并删除任何重复的节点。这样可以确保链表中每个节点的值都是唯一的。

实现

以下是该程序的实现。它使用了一个HashSet来跟踪出现的节点值,从而检测到重复项,并且使用指针来从链表中删除这些节点。

public void removeDuplicates(Node head) {
    HashSet<Integer> set = new HashSet<Integer>();
    Node current = head;
    Node previous = null;
    while (current != null) {
        if (set.contains(current.data)) {
            previous.next = current.next;
        } else {
            set.add(current.data);
            previous = current;
        }
        current = current.next;
    }
}
使用

要使用此程序,您需要创建一个未排序的链表,并将其传递给removeDuplicates方法。例如:

Node head = new Node(1);
head.next = new Node(2);
head.next.next = new Node(2);
head.next.next.next = new Node(3);
head.next.next.next.next = new Node(3);

removeDuplicates(head);

该程序将从链表中删除值为2和3的重复项。

性能

该程序具有线性时间复杂度O(n),因为它只需要遍历一次链表,而HashSet的插入和查询操作的时间复杂度为常数级别。唯一的缺点是它要求额外的空间来存储HashSet。但是,在大多数情况下,这个额外的空间是可以接受的。