C语言实现链表节点插入

我们在上一篇文章中介绍了链表。我们当时还创建了一个包含3个节点的简单链表,并探讨了链表的遍历。

本文讨论的所有程序都基于以下链表表示方式。

C


CODEBLOCK_f6254e47

在本文中,我们将讨论在链表中插入新节点的方法。我们可以通过三种方式添加节点:

1) 在链表的最前端
2) 在给定节点之后。
3) 在链表的末尾。
推荐:请在查看解决方案之前,先在“练习”上尝试解决它。
在链表前端添加节点: (4步流程)

新节点总是添加在给定链表的头节点之前。新添加的节点将成为链表新的头节点。例如,如果给定的链表是 10->15->20->25,我们在前端添加一个项 5,那么链表将变成 5->10->15->20->25。让我们把在链表前端添加节点的函数称为 push()。push() 必须接收一个指向头指针的指针,因为 push 必须修改头指针,使其指向新节点(参阅此处)。

<a href="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertatstart.png"><img src="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertat_start.png" alt="linkedlistinsertatstart" />

以下是在前端添加节点的4个步骤。

C


CODEBLOCK_783155bc

push() 的时间复杂度是 O(1),因为它执行的工作量是恒定的。

在给定节点之后添加节点: (5步流程)

我们给定了一个指向某个节点的指针,新节点将被插入到该给定节点之后。

<a href="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertmiddle.png"><img src="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertmiddle.png" alt="linkedlistinsertmiddle" />

C


CODEBLOCK_e70e956b

insertAfter() 的时间复杂度是 O(1),因为它执行的工作量是恒定的。

在链表末尾添加节点: (6步流程)

新节点总是添加在给定链表的最后一个节点之后。例如,如果给定的链表是 5->10->15->20->25,我们在末尾添加一个项 30,那么链表将变成 5->10->15->20->25->30。

由于链表通常由其头节点表示,我们必须遍历链表直到末尾,然后改变最后一个节点的 next 指向新节点。

<a href="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertlast.png"><img src="https://media.geeksforgeeks.org/wp-content/cdn-uploads/gq/2013/03/Linkedlistinsertlast.png" alt="linkedlistinsertlast" />

以下是在末尾添加节点的6个步骤。

C


// 给定一个指向链表头部的指针引用(指针的指针)和一个整数,

// 在末尾追加一个新节点

void append(struct Node head_ref,

int new_data)

{

// 1. 分配节点

struct Node* new_node =

(struct Node*) malloc(sizeof(struct Node));

// 用于步骤5

struct Node last = head_ref;

// 2. 放入数据

newnode->data = newdata;

// 3. 这个新节点将成为最后一个节点,所以将其next设为NULL

new_node->next = NULL;

// 4. 如果链表为空,则将新节点设为头节点

if (*head_ref == NULL)

{

*headref = newnode;

return;

}

// 5. 否则,遍历直到最后一个节点

while (last->next

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。如需转载,请注明文章出处豆丁博客和来源网址。https://shluqu.cn/47013.html
点赞
0.00 平均评分 (0% 分数) - 0