问. 在循环链表的中间插入新节点的程序。

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

说明

在此程序中,我们创建一个循环链表,并在列表的中间插入一个新节点。如果列表为空,head 和 tail 都将指向新节点。如果列表不为空,我们将计算列表的大小并除以 2,以获取需要插入新节点的中间点。

Program to insert a new node at the middle of the circular linked list

在列表的中间插入新节点后。

Program to insert a new node at the middle of the circular linked list

考虑上图,新节点需要添加到列表的中间。首先,我们计算大小,在本例中为 4。因此,为了获得中间点,我们将其除以 2 并将其存储在变量 count 中。我们将定义两个节点 current 和 temp,使得 temp 指向 head,current 指向 temp 前面的节点。我们遍历列表直到到达中间点,方法是将 temp 移动到 temp.next,然后,在新节点 current 和 temp 之间插入新节点。Current 的下一个节点将是 new,new 的下一个节点将是 temp。

算法

  1. 定义一个 Node 类,它表示列表中的一个节点。它有两个属性 data 和 next,next 将指向下一个节点。
  2. 定义另一个类来创建循环链表,它有两个节点:head 和 tail。变量 size 存储列表的大小。它有两个方法:addInMid() 和 display()。
  3. addInMid() 将节点添加到列表的中间
    1. 它首先检查 head 是否为 null(空列表),然后它将节点插入为 head。
    2. head 和 tail 都将指向新添加的节点。
    3. 如果列表不为空,那么我们计算大小并将其除以 2 以获得中点。
    4. 定义节点 temp,它将指向 head,current 将指向 temp 前面的节点。
    5. 通过将 temp 递增到 temp.next 来迭代列表,直到到达列表的中间。
    6. 新节点将插入在 current 之后和 temp 之前,使得 current 指向新节点,新节点指向 temp。
  4. display() 将显示列表中存在的所有节点。
    1. 定义一个新节点“current”,它将指向头节点。
    2. 打印 current.data 直到 current 再次指向 head。
    3. 在每次迭代中,current 将指向列表中的下一个节点。

解决方案

Python

输出

Original list: 
1 2 3 4
Updated List: 
1 2 5 3 4
Updated List: 
1 2 5 6 3 4

C

输出

Original list: 
1 2 3 4
Updated List: 
1 2 5 3 4
Updated List: 
1 2 5 6 3 4

JAVA

输出

Original list: 
1 2 3 4
Updated List: 
1 2 5 3 4
Updated List: 
1 2 5 6 3 4

C#

输出

Original list: 
1 2 3 4
Updated List: 
1 2 5 3 4
Updated List: 
1 2 5 6 3 4

PHP

输出

Original list: 
1 2 3 4
Updated List: 
1 2 5 3 4
Updated List: 
1 2 5 6 3 4
 
下一主题#