下面是在C语言中向链接列表添加节点的完整使用攻略。
什么是链接列表
链接列表(Linked List)是由多个节点组成的数据结构,每个节点包含一个数据元素和指向下一个节点的指针。
链接列表的优点是可以高效地插入和删除节点,而且不需要预先知道列表的大小。但缺点是访问任意一个节点的时间复杂度为O(n),不如数组高效。
如何向链接列表添加节点
首先,我们需要定义节点的结构体类型,结构体包含数据和指针两个成员变量:
struct node {
int data;
struct node *next;
};
其中,data表示节点存储的数据,next表示指向下一个节点的指针。
添加一个空的链接列表
要向链接列表中添加节点,需要首先创建一个空的链表,即链表中没有任何节点。
struct node *head = NULL;
其中,head表示链表的头部节点,初始值为NULL。
向链表中添加节点
在链表头部添加节点
要在链表头部添加一个新节点,在新节点中存储数据,将原有的头部节点变为新节点的下一个节点,最后将新节点作为链表的新头部节点。
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = 10; // 存储数据
new_node->next = head; // 新节点的下一个节点是原有的头部节点
head = new_node; // 新节点成为新的头部节点
在链表尾部添加节点
要在链表尾部添加一个新节点,先遍历到链表的末尾,将新节点作为最后一个节点的下一个节点。
struct node *new_node = (struct node*)malloc(sizeof(struct node));
new_node->data = 20; // 存储数据
new_node->next = NULL; // 新节点为最后一个节点,所以指向NULL
if (head == NULL) { // 链表为空,新节点成为头部节点
head = new_node;
} else { // 链表不为空,遍历到末尾
struct node *last = head;
while (last->next != NULL) {
last = last->next;
}
last->next = new_node; // 将新节点作为最后一个节点的下一个节点
}
示例说明
示例一:向链表头部添加节点
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
int main() {
struct node *head = NULL;
// 在头部添加节点
struct node *new_node1 = (struct node*)malloc(sizeof(struct node));
new_node1->data = 10;
new_node1->next = head;
head = new_node1;
struct node *new_node2 = (struct node*)malloc(sizeof(struct node));
new_node2->data = 20;
new_node2->next = head;
head = new_node2;
// 遍历所有节点
struct node *current = head;
while (current != NULL) {
printf("%d\n", current->data);
current = current->next;
}
return 0;
}
输出结果为:
20
10
示例二:向链表尾部添加节点
#include <stdio.h>
#include <stdlib.h>
struct node {
int data;
struct node *next;
};
int main() {
struct node *head = NULL;
// 在尾部添加节点
struct node *new_node1 = (struct node*)malloc(sizeof(struct node));
new_node1->data = 10;
new_node1->next = NULL;
head = new_node1;
struct node *new_node2 = (struct node*)malloc(sizeof(struct node));
new_node2->data = 20;
new_node2->next = NULL;
if (head == NULL) {
head = new_node2;
} else {
struct node *current = head;
while (current->next != NULL) {
current = current->next;
}
current->next = new_node2;
}
// 遍历所有节点
struct node *current = head;
while (current != NULL) {
printf("%d\n", current->data);
current = current->next;
}
return 0;
}
输出结果为:
10
20
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:在C语言中向链接列表添加节点 - Python技术站