从单向链表中删除中间节点的程序

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

说明

在此程序中,我们将创建一个单链表并从列表中间删除一个节点。为完成此任务,我们将计算列表的大小,然后将其除以 2 以获得列表的中间点。节点 temp 将指向头节点。我们将遍历列表直到到达中间点。现在,temp 将指向中间节点,current 节点将指向 temp 的前一个节点。我们通过将 current 的下一个节点指向 temp 的下一个节点来删除中间节点。

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

以上面为例,上面列表的中间点是 2。将 temp 从头节点遍历到中间点。现在,temp 指向需要删除的中间节点。在这种情况下,Node 是需要删除的中间节点。可以通过使节点 2 的下一个节点(current)指向节点 3(temp 的下一个节点)来删除该节点。将 temp 设置为 null。

算法

  1. 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  2. 创建另一个名为 DeleteMid 的类,该类具有三个属性:head、tail 和 size,用于跟踪列表中存在的节点数。
  3. addNode() 将向列表添加一个新节点
    1. 创建一个新节点。
    2. 它首先检查 head 是否等于 null,这意味着列表为空。
    3. 如果列表为空,head 和 tail 都将指向新添加的节点。
    4. 如果列表不为空,新节点将被添加到列表的末尾,以便 tail 的 next 将指向新添加的节点。这个新节点将成为列表的新 tail。
  4. deleteFromMid() 将从链表中删除中间节点
    1. 它首先检查 head 是否为 null(空列表),然后显示消息“列表为空”并返回。
    2. 如果列表不为空,它将检查列表是否只有一个节点。
    3. 如果列表只有一个节点,它将 head 和 tail 都设置为 null。
    4. 如果列表包含多个节点,则计算列表的大小并将其除以 2 以获得列表的中间点。
    5. 声明一个节点 temp,它将指向 head,以及一个节点 current,它将指向 temp 的前一个节点。
    6. 遍历列表直到 temp 指向中间节点。如果 current 不指向 null,则通过使 current 的下一个节点指向 temp 的下一个节点来删除中间节点(temp)。否则,head 和 tail 都将指向 temp 的下一个节点,并通过将 temp 设置为 null 来删除中间节点。
  5. display() 将显示列表中存在的节点
    1. 定义一个节点 current,它最初将指向列表的 head。
    2. 遍历列表直到 current 指向 null。
    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
 
下一主题#