欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 财经 > 创投人物 > C语言0基础的前端考研日记:头插法/尾插法创建单链表

C语言0基础的前端考研日记:头插法/尾插法创建单链表

2025/9/20 5:49:42 来源:https://blog.csdn.net/weixin_41981909/article/details/142615654  浏览:    关键词:C语言0基础的前端考研日记:头插法/尾插法创建单链表

一、头插法思路:

1、新节点的下一个节点指向链表的第一个节点
2、将头结点的下一个节点指向新节点

将数据按这个步骤处理后,新节点就会变为链表的第一个节点

前置知识点

malloc 函数:用于从堆中分配一块指定大小的内存。
内存分配成功返回指向该内存块的指针,否则返回 NULL
使用方法:('数据类型的指针')malloc('内存大小');

sizeof(Node) 获取Node类型所需内存大小

#include <stdio.h>
#include <stdlib.h>typedef struct Node {int data;struct Node *next;
} Node;void insert (Node *L) {int x;scanf("%d", &x); // 让用户输入数据printf("插入%d\n", x); // 控制台打印用户输入的数据if (x != 0) { // 当x=0时,插入结束Node *n = (Node *)malloc(sizeof(Node)); // printf ("data: %d next: %p\n", n->data, n->next);printf ("data: %d next: %p\n", L->data, L->next);if (n == NULL) {printf("内存分配失败\n");exit(0);}// 将用户输入的数据赋值给新节点n->data = x; // L: Head -> FirstNode -> NULL; n: n -> NULL;// 让节点n指向节点FirstNoden->next = L->next; // L: Head -> FirstNode -> NULL; n: n -> FirstNode -> NULL;// 将头结点的next指向新节点L->next = n;  // L: Head -> n -> FirstNode -> NULLinsert(L); // 递归,直到用户输入的数据为0};
};
// 打印整个链表
void printList(Node *L) {Node *current = L->next; // 从头结点的下一个开始遍历while (current != NULL) {printf("%d -> ", current->data);current = current->next;}printf("NULL\n"); // 结束标志
}int main() {Node L = {0, NULL};insert(&L);printList(&L);return 0;
}

二、尾插法思路

1、声明变量tail用于存储尾结点的指针,这样可以随时找到链表的尾结点
2、将尾结点的next指向新节点,此时新节点就会成为链表的尾结点
3、将新节点的指针赋值给tail
4、重复以上步骤,直到用户输入的数据为0, 结束链表的创建

相对于头插法只在insert、main做了修改

void insert (Node *L, Node *last) {int x;scanf("%d", &x); // 让用户输入数据printf("插入%d\n", x); // 控制台打印用户输入的数据if (x != 0) { // 当x=0时,插入结束Node *n = (Node *)malloc(sizeof(Node));// 将用户输入的数据赋值给新节点n->data = x; // L: Head -> ... -> lastNode -> NULL; n: n -> NULL;// lastNode的next指向新节点last->next = n; // L: Head -> ... -> lastNode -> n -> NULL; last: *lastNode;// 新节点成为了链表尾结点last = n; // last: n;insert(L, last); // 递归,直到用户输入的数据为0} else {last->next = NULL; // 输入结束时将尾结点的next赋值为NULL};
};int main() {Node L = {0, NULL};Node *lastPoint = &L;insert(&L, lastPoint);printList(&L);return 0;
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词