Java 从单链表中删除重复元素的程序

17 Mar 2025 | 4 分钟阅读

在此程序中,我们需要从给定的单向链表中移除重复的节点。

原始列表

Java program to remove duplicate elements from a singly linked list

移除重复节点后的列表

Java program to remove duplicate elements from a singly linked list

在上面的列表中,节点 2 重复出现三次,节点 1 重复出现两次。`current` 节点将指向 `head`,`index` 将指向 `current` 的下一个节点。开始遍历列表,直到找到一个重复项,即 `current` 的数据等于 `index` 的数据。在上面的示例中,第一个重复项将在位置 4 找到。将 `current` 赋给另一个节点 `temp`。将 `temp` 的下一个节点连接到 `index` 的下一个节点。删除指向重复节点的 `index`。此过程将继续,直到所有重复项都被删除。

算法

  • 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  • 创建另一个名为 `RemoveDuplicate` 的类,该类有两个属性:`head` 和 `tail`。
  • addNode() 将向列表添加一个新节点
    • 创建一个新节点。
    • 它首先检查 head 是否等于 null,这意味着列表为空。
    • 如果列表为空,则 head 和 tail 都将指向新添加的节点。
    • 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。

a. `removeDuplicate()` 将从列表中移除重复节点。

  • 定义一个新节点 current,它最初将指向头节点。
  • `temp` 节点将指向 `current`,`index` 将始终指向 `current` 的下一个节点。
  • 循环遍历列表,直到 `current` 指向 `null`。
  • 检查 current 的数据是否等于 index 的数据,这意味着 index 是 current 的重复项。
  • 由于 `index` 指向重复节点,因此通过将 `temp` 的下一个节点指向 `index` 的下一个节点来跳过它,即 `temp.next = index.next`。

a. display() 将显示列表中存在的节点

  • 定义一个节点 current,它最初将指向列表的 head。
  • 遍历列表直到 current 指向 null。
  • 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

程序

输出

Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 
下一个主题Java 程序