问:从双向链表中删除重复元素的程序。

2025年3月17日 | 阅读 10 分钟

说明

在此程序中,我们将创建一个双向链表,并通过遍历链表来删除重复元素(如果存在)。

原始列表

Program to remove duplicate elements from a doubly linked list

删除重复元素后的列表

Program to remove duplicate elements from a doubly linked list

在上面的列表中,node2 重复了三次,node 3 重复了两次。Current 将指向 head,index 将指向 current 的下一个节点。开始遍历列表,直到找到一个重复项,即 current 的数据等于 index 的数据。在上面的示例中,第一个重复项将在位置 4 找到。将 index 指向另一个节点 temp。将 index 的前一个节点连接到 index 的下一个节点。删除指向重复节点的 temp。此过程将继续进行,直到删除所有重复项。

算法

  1. 定义一个 Node 类,它表示列表中的一个节点。它将有三个属性:数据、previous 指向前一个节点,以及 next 指向下一个节点。
  2. 定义另一个用于创建双向链表的类,它有两个节点:头节点和尾节点。最初,头节点和尾节点将指向 null。
  3. addNode() 将向列表中添加节点。
    1. 它首先检查头节点是否为 null,然后将节点作为头节点插入。
    2. 头节点和尾节点都将指向新添加的节点。
    3. 头节点的前一个指针将指向 null,尾节点的下一个指针将指向 null。
    4. 如果头节点不为 null,则新节点将插入到列表的末尾,使得新节点的前一个指针将指向尾节点。
    5. 新节点将成为新的尾节点。尾节点的下一个指针将指向 null。
  4. removeDuplicateNode() 将从列表中删除重复的节点。
    1. 定义一个新节点 current,它最初将指向头节点。
    2. 节点 index 将始终指向 current 的下一个节点。
    3. 循环遍历列表,直到 current 指向 null。
    4. 检查 current 的数据是否等于 index 的数据,这意味着 index 是 current 的重复项。
    5. 节点 temp 将指向 index 以存储重复节点。
    6. index 的前一个节点将指向 index 的下一个节点。
    7. 由于 temp 指向 index(这是一个重复节点),因此将 temp 设置为 null。
  5. display() 将显示列表中存在的所有节点。
    1. 定义一个新节点“current”,它将指向头节点。
    2. 打印 current.data 直到 current 指向 null。
    3. 在每次迭代中,current 将指向列表中的下一个节点。

解决方案

Python

输出

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

C

输出

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

JAVA

输出

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

C#

输出

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

PHP

输出

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