循环双向链表末尾删除

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

在循环双向链表中删除第一个节点有两种情况。

要删除的节点可以是链表中唯一的节点。在这种情况下,条件 head → next == head 将变为真,因此需要完全删除该列表。

这可以通过将列表的头指针分配为 null 并释放头指针来简单地完成。

在第二种情况下,列表中包含多个元素,因此条件 head → next == head 将变为假。现在,到达列表的最后一个节点并在那里进行一些指针调整。为此运行一个 while 循环。

现在,temp 将指向要从列表中删除的节点。将 temp 前一个节点的 next 指针指向列表的头节点。

将头节点的 previous 指针指向 temp 的前一个节点。

现在,释放 temp 指针以释放节点占用的内存。

通过这种方式,列表的最后一个节点被删除。

算法

  • 步骤 1: 如果 HEAD = NULL
  • 输出 UNDERFLOW
    转到步骤 8
    [IF 结束]

  • 步骤 2: 设置 TEMP = HEAD
  • 步骤 3: 重复步骤 4,直到 TEMP -> NEXT != HEAD
  • 步骤 4: 设置 TEMP = TEMP -> NEXT
  • [循环结束]

  • 步骤 5: 设置 TEMP -> PREV -> NEXT = HEAD
  • 步骤 6: 设置 HEAD -> PREV = TEMP -> PREV
  • 步骤 7: 释放 TEMP
  • 步骤 8: 退出

Deletion in circular doubly linked list at end

C 函数

输出

1.Append List
2.Delete Node from last
3.Exit
4.Enter your choice?1

Enter the item
12

Node Inserted
1.Append List
2.Delete Node from last
3.Exit
4.Enter your choice?2

Node Deleted

下一个主题双向链表