在单向循环链表头部插入节点

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

在单向循环链表头部插入节点有两种情况:要么是在空链表中插入节点,要么是在已包含节点的链表中插入节点。

首先,使用 C 语言的 malloc 方法分配新节点的内存空间。

在第一种情况(空链表)下,条件 head == NULL 将为真。由于我们正在插入节点的链表是单向循环链表,因此链表中唯一的节点(刚刚插入到链表中的节点)将指向自身。我们还需要让 head 指针指向这个节点。这可以通过以下语句完成:

在第二种情况(非空链表)下,条件 head == NULL 将为假,这意味着链表至少包含一个节点。在这种情况下,我们需要遍历链表以到达链表的最后一个节点。这可以通过以下语句完成:

在循环结束时,指针 temp 将指向链表的最后一个节点。由于在单向循环链表中,链表的最后一个节点包含指向第一个节点的指针。因此,我们需要让最后一个节点的 next 指针指向链表的 head 节点,而新插入到链表中的节点将成为链表的新 head 节点,因此 temp 的 next 指针将指向新节点 ptr。

这将通过以下语句完成。

temp 的 next 指针将指向链表中现有的 head 节点。

现在,让新节点 ptr 成为单向循环链表的新 head 节点。

这样,节点 ptr 就被插入到了单向循环链表的头部。

算法

  • 步骤 1:如果 PTR = NULL
  •   写入 OVERFLOW
     转到步骤 11
     [IF 结束]

  • 步骤 2:设置 NEW_NODE = PTR
  • 步骤 3:设置 PTR = PTR -> NEXT
  • 步骤 4:设置 NEW_NODE -> DATA = VAL
  • 步骤 5: 设置 TEMP = HEAD
  • 步骤 6: 当 TEMP -> NEXT != HEAD 时,重复步骤 8
  • 步骤 7: 设置 TEMP = TEMP -> NEXT
  • [循环结束]

  • 步骤 8: 设置 NEW_NODE -> NEXT = HEAD
  • 步骤 9: 设置 TEMP → NEXT = NEW_NODE
  • 步骤 10: 设置 HEAD = NEW_NODE
  • 步骤 11: 退出

Insertion into circular singly linked list at beginning

C 函数

输出

	Enter the item which you want to insert?
12

Node Inserted

Press 0 to insert more ?
0

Enter the item which you want to insert?
90

Node Inserted

Press 0 to insert more ?
2

下一个主题双向链表