在循环双链表的末尾插入

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

在循环双链表的末尾插入节点有两种情况:链表为空或链表包含多个元素。

使用以下语句为新节点 ptr 分配内存空间。

在第一种情况下,条件 head == NULL 为真,因此节点将被添加为链表中的第一个节点。这个新添加节点的 next 和 prev 指针将指向它本身。这可以通过以下语句完成。

在第二种情况下,条件 head == NULL 为假,因此节点将被添加为链表中的最后一个节点。为此,我们需要在链表的末尾进行一些指针调整。因为新节点将包含链表第一个节点的地址,所以我们需要将最后一个节点的 next 指针指向链表的头节点。同样,头节点的 prev 指针也将指向新的最后一个节点。

现在,我们还需要将现有链表最后一个节点 (temp) 的 next 指针指向新的最后一个节点,同样,新的最后一个节点也将包含指向 temp 的 prev 指针。这将通过以下语句完成。

这样,新节点 ptr 就已经被插入为链表的最后一个节点。算法及其 C 实现如下所述。

算法

  • 步骤 1:如果 PTR = NULL
  • 输出 OVERFLOW
    转到步骤 12
    [IF 结束]

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

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

Insertion in circular doubly linked list at end

C 函数

输出

Enter the item which you want to insert?
123

Node Inserted

Press 0 to insert more ?
12

下一个主题双向链表