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

2025年03月17日 | 阅读 9 分钟

说明

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

原始列表

Program to remove duplicate elements from a singly linked list

删除重复节点后的列表

Program to remove duplicate elements from a singly linked list

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

算法

  1. 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  2. 创建另一个名为 RemoveDuplicate 的类,它有两个属性:head 和 tail。
  3. addNode() 将向列表添加一个新节点
    1. 创建一个新节点。
    2. 它首先检查 head 是否等于 null,这意味着列表为空。
    3. 如果列表为空,则 head 和 tail 都将指向新添加的节点。
    4. 如果列表不为空,新节点将添加到列表末尾,使得 tail 的 next 指向新添加的节点。此新节点将成为列表的新 tail。
  4. removeDuplicate() 将删除列表中的重复节点。
    1. 定义一个新节点 current,它最初将指向头节点。
    2. 节点 temp 将指向 current,index 将始终指向 current 的下一个节点。
    3. 循环遍历列表,直到 current 指向 null。
    4. 检查 current 的数据是否等于 index 的数据,这意味着 index 是 current 的重复项。
    5. 由于 index 指向重复节点,因此通过将 temp 的下一个节点设置为 index 的下一个节点来跳过它,即 temp.next = index.next。
  5. display() 将显示列表中存在的节点
    1. 定义一个节点 current,它最初将指向列表的 head。
    2. 遍历列表直到 current 指向 null。
    3. 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

解决方案

Python

输出

 Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 

C

输出

Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 

JAVA

输出

Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 

C#

输出

Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 

PHP

输出

 Originals list: 
1 2 3 2 2 4 1 
List after removing duplicates: 
1 2 3 4 
 
下一主题#