在循环双向链表开头插入

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

在循环双向链表的开头插入节点有两种情况。一种是链表为空,另一种是链表中包含一个以上的元素。

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

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

在第二种情况下,条件head == NULL为假。在这种情况下,我们需要在链表的末尾进行一些指针调整。为此,我们需要通过遍历链表来找到链表的最后一个节点。遍历链表可以通过以下语句完成。

循环结束后,指针temp将指向链表的最后一个节点。由于要插入的节点将是链表的第一个节点,因此temp必须在其下一个部分包含新节点ptr的地址。所有指针调整都可以通过以下语句完成。

这样,新节点就被插入到链表的开头。算法及其C语言实现如下。

算法

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

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

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

Insertion in circular doubly 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?
23
Node Inserted
Press 0 to insert more ?
1

下一个主题双向链表