📅  最后修改于: 2023-12-03 15:11:15.625000             🧑  作者: Mango
这是一个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。但是,在大多数情况下,这个额外的空间是可以接受的。