问:在双向链表的中间插入新节点的程序。

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

说明

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

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

考虑上面的图,需要在列表中间添加一个新节点。首先,我们计算大小,在这种情况下为 4。因此,为了获得中间点,我们将其除以 2 并将其存储在变量 mid 中。节点 current 将指向 head。首先,我们遍历列表,直到 current 指向 mid 位置。定义另一个节点 temp,它指向 current 之后的节点。在 current 和 temp 之间插入新节点。

算法

  1. 定义一个 Node 类,它表示列表中的一个节点。它将有三个属性:数据、previous 指向前一个节点,以及 next 指向下一个节点。
  2. 为创建双向链表定义另一个类,它有两个节点:head 和 tail。最初,head 和 tail 将指向 null。
  3. addNode() 将向列表中添加节点。
    1. 它首先检查头节点是否为 null,然后将节点作为头节点插入。
    2. 头节点和尾节点都将指向新添加的节点。
    3. 头节点的前一个指针将指向 null,尾节点的下一个指针将指向 null。
    4. 如果头节点不为 null,则新节点将插入到列表的末尾,使得新节点的前一个指针将指向尾节点。
    5. 新节点将成为新的尾节点。尾节点的下一个指针将指向 null。
  4. addInMid() 将向列表的中间添加一个节点。
    1. 它首先检查 head 是否为 null(空列表),然后它将节点插入为 head。
    2. 头节点和尾节点都将指向新添加的节点。
    3. 如果列表不为空,那么我们计算大小并将其除以 2 以获得中点。
    4. 定义节点 current,它将指向 head,并遍历列表,直到 current 指向 mid 节点。
    5. 定义另一个节点 temp,它将指向 current 的下一个节点。
    6. 新节点将插入在 current 之后和 temp 之前,使得 current 指向新节点,新节点指向 temp。
  5. display() 将显示列表中存在的所有节点。
    1. 定义一个新节点“current”,它将指向头节点。
    2. 打印 current.data 直到 current 指向 null。
    3. 在每次迭代中,current 将指向列表中的下一个节点。

解决方案

Python

输出

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

C

输出

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

JAVA

输出

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

C#

输出

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

PHP

输出

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