循环单链表尾部删除

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

循环单链表中尾部删除节点有三种情况。

情况 1(链表为空)

如果链表为空,则条件head == NULL成立,此时只需在屏幕上输出underflow并退出。

情况 2(链表只有一个元素)

如果链表中只有一个节点,则条件head → next == head成立。此时需要删除整个链表并将head指针释放。这将通过以下语句完成:

情况 3(链表中包含多个元素)

如果链表中包含多个元素,那么要删除最后一个元素,就需要找到最后一个节点。我们还需要跟踪链表的倒数第二个节点。为此,定义了两个指针ptr和preptr。以下代码序列用于此目的:

现在,我们还需要再调整一个指针。我们需要将preptr的next指针指向ptr的下一个(即head),然后释放ptr指针。

算法

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

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

  • 步骤 6:设置 PREPTR -> NEXT = HEAD
  • 步骤 7:释放 PTR
  • 步骤 8: 退出

Deletion in Circular singly linked list at the end

C 函数

输出

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

Enter the item
90

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

Node Deleted