
C语言:链表运用(一)
链表的节点总数统计统计链表中节点的总数可以通过遍历链表节点,逐个计数实现。以下是统计节点总数的代码:
发布日期:2021-05-07 07:21:51
浏览次数:23
分类:精选文章
本文共 4592 字,大约阅读时间需要 15 分钟。
链表操作实例解析
链表的输出
链表的输出是一种常见操作,主要用于遍历链表节点并将节点的数据逐个打印出来。以下是实现链表输出的代码示例:
#includestruct Test { int data; struct Test *next;};void printLink(struct Test *head) { struct Test *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } putchar('\n');}int main() { struct Test t1 = {1, NULL}; struct Test t2 = {2, NULL}; struct Test t3 = {3, NULL}; t1.next = &t2; t2.next = &t3; printLink(&t1); return 0;}
代码解释:
printLink
函数用于打印链表的所有节点数据。它从链表的头节点开始遍历,逐个打印每个节点的数据,直到遍历到最后一个节点。main
函数创建了三个节点,并将它们按顺序连接成链表。然后调用printLink
函数打印链表的内容。
链表的个数、查找
struct Test { int data; struct Test *next;};void printLink(struct Test *head) { struct Test *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } putchar('\n');}int getLinkTotalNodeNum(struct Test *head) { int cnt = 0; struct Test *p = head; while (p != NULL) { cnt++; p = p->next; } return cnt;}int main() { struct Test t1 = {1, NULL}; struct Test t2 = {2, NULL}; struct Test t3 = {3, NULL}; t1.next = &t2; t2.next = &t3; printLink(&t1); printf("节点总数:%d\n", getLinkTotalNodeNum(&t1)); return 0;}
代码解释:
getLinkTotalNodeNum
函数通过遍历链表节点,逐个递增计数器cnt
,直到遍历完所有节点后返回节点总数。main
函数创建链表并调用getLinkTotalNodeNum
函数统计节点总数,打印结果。
- 链表查找查找链表中的节点可以通过遍历链表节点,逐个比较节点数据,直到找到目标节点或遍历完所有节点。以下是查找节点的代码:
searchLink
函数通过遍历链表,逐个比较节点数据,直到找到目标节点或返回 0 表示未找到。main
函数打印链表内容并调用searchLink
函数查找节点,打印查找结果。insertFromBehind
函数通过遍历链表,找到目标数据节点的后一个位置,将新节点插入到该位置。inserFromFront
函数通过遍历链表,找到目标数据节点的前一个位置,将新节点插入到该位置。main
函数创建链表并调用上述插入函数,打印插入后的链表内容。deleteNode
函数通过遍历链表,找到目标节点并删除它。需要注意的是,链表的每个节点都是动态分配的,删除时需要正确处理指针。main
函数创建链表并调用deleteNode
函数删除指定节点,打印删除后的链表内容。
struct Test { int data; struct Test *next;};void printLink(struct Test *head) { struct Test *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } putchar('\n');}int searchLink(struct Test *head, int data) { struct Test *p = head; while (p != NULL) { if (p->data == data) { return 1; } p = p->next; } return 0;}int main() { struct Test t1 = {1, NULL}; struct Test t2 = {2, NULL}; struct Test t3 = {3, NULL}; t1.next = &t2; t2.next = &t3; printLink(&t1); printf("查找结果:%d\n", searchLink(&t1, 5)); return 0;}
代码解释:
链表的后插、前插
链表插入操作是链表编程中的常见操作,包括前插和后插两种方式。以下是链表插入的代码示例:
#includestruct Test { int data; struct Test *next;};void printLink(struct Test *head) { struct Test *p = head; while (p != NULL) { printf("%d ", p->data); p = p->next; } putchar('\n');}int insertFromBehind(struct Test *head, struct Test *newNode, int data) { struct Test *p = head; while (p != NULL) { if (p->data == data) { newNode->next = p->next; p->next = newNode; return 1; } p = p->next; } return 0;}struct Test* inserFromFront(struct Test *head, struct Test *newNode, int data) { struct Test *p = head; if (p->data == data) { newNode->next = p; return newNode; } while (p->next != NULL) { if (p->next->data == data) { newNode->next = p->next; p->next = newNode; return head; } p = p->next; } return head;}int main() { struct Test *head = NULL; struct Test t1 = {1, NULL}; struct Test t2 = {2, NULL}; struct Test t3 = {3, NULL}; struct Test new_node = {6, NULL}; struct Test new_node2 = {89, NULL}; t1.next = &t2; t2.next = &t3; head = &t1; insertFromBehind(head, &new_node, 2); printLink(head); head = inserFromFront(head, &new_node2, 2); printLink(head); return 0;}
代码解释:
链表的删除
链表删除操作需要谨慎处理,确保删除操作不会导致链表断裂或内存泄漏。以下是链表删除的代码示例:
struct Test { int data; struct Test *next;};struct Test* deleteNode(struct Test *head, int data) { struct Test *p = head; struct Test *p2 = NULL; if (p->data == data) { head = head->next; // p不是动态分配的内存,通常不需要释放 return head; } while (p->next != NULL) { if (p->next->data == data) { p2 = p->next; p->next = p->next->next; return head; } p = p->next; } return head;}int main() { struct Test *head = NULL; struct Test t1 = {1, NULL}; struct Test t2 = {2, NULL}; struct Test t3 = {3, NULL}; t1.next = &t2; t2.next = &t3; head = &t1; head = deleteNode(head, 3); printLink(head); return 0;}
代码解释:
这些代码示例展示了链表的常用操作,包括输出、统计节点数、查找、插入(前后)和删除等功能。
发表评论
最新留言
很好
[***.229.124.182]2025年05月18日 19时05分31秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MongoDB文档常见查询
2025-04-14
MongoDB无法远程连接
2025-04-14
MongoDB查询字符串日期列等于系统日的数据
2025-04-14
MongoDB框架零基础入门
2025-04-14
mongoDb概述(翻译自官网)
2025-04-14
mongodb每天上亿数据量定期清理
2025-04-14
MongoDB的Decimal128类型转换成Java的BigDecimal类型错误
2025-04-14
MongoDB的SQL转化成mongoTemplate实现
2025-04-14
mongodb的一些语句使用
2025-04-14
MongoDb的基本操作快速入门
2025-04-14
MongoDB的安装、启停和常用命令(五分钟入门)
2025-04-14
MongoDB系列—— Window 搭建Mongodb 集群
2025-04-14
MongoDB索引
2025-04-14
MongoDB索引详解、explain执行计划详细介绍
2025-04-14
mvp+jetpack组件框架
2025-04-14
MongoDB聚合(Map-Reduce)(二)
2025-04-14
mongodb记录存储管理
2025-04-14
mongoDB详解
2025-04-14
MongoDB语句
2025-04-14