循环双链表头部删除

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

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

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

这可以通过将链表的 head 指针赋值为 null 并释放 head 指针来轻松完成。

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

现在,temp 将指向链表的最后一个节点。需要删除链表的第一个节点,即由 head 指针指向的节点。因此,最后一个节点必须包含指向现有 head 节点 next 指针所指向的节点的地址。为此使用以下语句。

新的 head 节点,即现有 head 节点的 next 节点,也必须通过其 previous 指针指向链表的最后一个节点。为此使用以下语句。

现在,释放 head 指针,并将其 next 指针设置为链表的新 head 节点。

这样,就从循环双链表的开头删除了一个节点。

算法

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

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

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

Deletion in Circular doubly linked list at beginning

C 函数

输出

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

Enter the item
12

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

Node Deleted

下一个主题双向链表