删除循环单链表头部节点

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

为了删除循环单链表中的一个节点,我们需要进行一些指针调整。

从循环单链表头部删除一个节点有三种情况。

情况 1:(列表为空)

如果列表为空,则条件 head == NULL 将为 true,在这种情况下,我们只需要在屏幕上打印 underflow 并退出。

情况 2:(列表包含单个节点)

如果列表包含单个节点,则条件 head → next == head 将为 true。在这种情况下,我们需要删除整个列表并释放 head 指针。这可以通过以下语句完成。

情况 3:(列表包含多个节点)

如果列表包含多个节点,则在这种情况下,我们需要使用指针 ptr 遍历列表以到达列表的最后一个节点。这可以通过以下语句完成。

循环结束后,指针 ptr 指向列表的最后一个节点。由于列表的最后一个节点指向列表的 head 节点。因此,这将更改为现在,列表的最后一个节点将指向 head 节点之后的节点。

现在,使用 C 语言中的 free() 方法释放 head 指针。

将最后一个节点之后的节点设置为新的列表 head。

这样,就从循环单链表的头部删除了节点。

算法

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

  • 步骤 2: 设置 PTR = HEAD
  • 步骤 3:重复步骤 4 直到 PTR → NEXT != HEAD
  • 步骤 4:设置 PTR = PTR → next
  • [循环结束]

  • 步骤 5:设置 PTR → NEXT = HEAD → NEXT
  • 步骤 6:释放 HEAD
  • 步骤 7:设置 HEAD = PTR → NEXT
  • 步骤 8: 退出

Deletion in circular singly 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
	

下一个主题双向链表