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

17 Mar 2025 | 5 分钟阅读

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

Java program to delete a node from the middle of the singly linked list

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

算法

  • 创建一个名为 Node 的类,它有两个属性:data 和 next。Next 是指向链表中下一个节点的指针。
  • 创建另一个名为 deleteMid 的类,它有三个属性:head、tail 和 size,用于跟踪链表中存在的节点数量。
  • addNode() 将向列表添加一个新节点
    • 创建一个新节点。
    • 它首先检查 head 是否等于 null,这意味着列表为空。
    • 如果列表为空,head 和 tail 都将指向新添加的节点。
    • 如果列表不为空,新节点将被添加到列表的末尾,以便 tail 的 next 将指向新添加的节点。这个新节点将成为列表的新 tail。

a. deleteFromMid() 将从列表的中间删除一个节点

  • 它首先检查 head 是否为 null(空列表),然后显示消息“列表为空”并返回。
  • 如果列表不为空,它将检查列表是否只有一个节点。
  • 如果列表只有一个节点,它将 head 和 tail 都设置为 null。
  • 如果列表有多个节点,则计算列表的大小并将其除以 2 以获得列表的中间点。
  • 声明一个节点 temp,它将指向 head,而 current 节点将指向 temp 之前的节点。
  • 遍历列表直到 temp 指向中间节点。如果 current 不指向 null,则通过使 current 的 next 指向 temp 的 next 来删除中间节点 (temp)。否则,head 和 tail 都将指向 temp 的下一个节点,并通过将 temp 设置为 null 来删除中间节点。

a. display() 将显示列表中存在的节点

  • 定义一个节点 current,它最初将指向列表的 head。
  • 遍历列表直到 current 指向 null。
  • 通过使 current 在每次迭代中指向它的下一个节点来显示每个节点。

程序

输出

Original List: 
1 2 3 4 
Updated List: 
1 3 4 
Updated List: 
1 4 
Updated List: 
4 
Updated List: 
List is empty
下一个主题Java 程序