问:从循环链表中间删除新节点的程序。

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

说明

在此程序中,我们将创建一个循环链表并从链表的中间删除一个节点。如果链表为空,则显示消息“列表为空”。如果链表不为空,我们将计算链表的大小,然后将其除以 2 以获得链表的中间点。我们维护两个指针 temp 和 current。current 将指向 temp 的前一个节点。我们将遍历链表直到达到中间点,然后 current 将指向中间节点。我们删除中间节点,使得 current 的下一个节点是 temp 的下一个节点。

Program to delete a new node from the middle of the circular linked list

从链表中间删除节点后的循环链表

Program to delete a new node from the middle of the circular linked list

考虑上面的列表。列表的大小为 4。节点的中间点为 2。要从列表中删除 C,我们将遍历列表直到中间点。现在 current 将指向 B,temp 将指向 C。当 B 指向 D 时,C 将被删除。

算法

  1. 定义一个 Node 类,它表示列表中的一个节点。它有两个属性 data 和 next,next 将指向下一个节点。
  2. 定义另一个类来创建循环链表,它有两个节点:head 和 tail。它有一个变量 size 和两个方法:deleteMid() 和 display()。
  3. deleteMid() 将从列表的中间删除节点
    1. 它首先检查 head 是否为空(空列表),如果是,则由于列表中不存在节点,它将从函数返回。
    2. 如果列表不为空,它将检查列表是否只有一个节点。
    3. 如果列表只有一个节点,它将 head 和 tail 都设置为 null。
    4. 如果列表有多个节点,它将计算列表的大小。将大小除以 2 并将其存储在变量 count 中。
    5. temp 将指向 head,current 将指向 temp 的前一个节点。
    6. 遍历列表直到 current 指向列表的中间节点。
    7. current 将指向 temp 的下一个节点,即删除 current 的下一个节点。
  4. display() 将显示列表中存在的所有节点。
    1. 定义一个新节点“current”,它将指向头节点。
    2. 打印 current.data 直到 current 再次指向 head。
    3. 在每次迭代中,current 将指向列表中的下一个节点。

解决方案

Python

输出

Original List: 
 1 2 3 4
Updated List: 
 1 3 4
Updated List: 
 1 4
Updated List: 
 4
Updated List: 
List is empty

C

输出

Original List: 
 1 2 3 4
Updated List: 
 1 3 4
Updated List: 
 1 4
Updated List: 
 4
Updated List: 
List is empty

JAVA

输出

Original List: 
 1 2 3 4
Updated List: 
 1 3 4
Updated List: 
 1 4
Updated List: 
 4
Updated List: 
List is empty

C#

输出

Original List: 
 1 2 3 4
Updated List: 
 1 3 4
Updated List: 
 1 4
Updated List: 
 4
Updated List: 
List is empty

PHP

输出

Original List: 
 1 2 3 4
Updated List: 
 1 3 4
Updated List: 
 1 4
Updated List: 
 4
Updated List: 
List is empty
 
下一主题#