链表 -- 环链表

发布时间:2026/9/21 1:39:26

链表 -- 环链表 环链表的创建4 node_t *clinklist_create(void) 5 { 6 node_t*pheadmalloc(sizeof(node_t)); 7 if(pheadNULL) 8 { 9 printf(malloc fail); 10 return NULL; 11 } 12 phead-nextphead; 13 return phead; 14 }与普通链表区分这里头节点指向自己环链表的头插入16 void clinlist_insert_head(node_t*phead,data_t d) 17 { 18 node_t*p_newmalloc(sizeof(node_t)); 19 if(pheadNULL) 20 { 21 printf(malloc fail); 22 return ; 23 } 24 if(phead-nextphead) //只有头节点的情况 25 { 26 phead-nextp_new; 27 p_new-nextp_new; 28 p_new-datad; 29 return; 30 } 31 node_t*p_tailphead-next; 32 while(p_tail-next!phead-next) //其实也可以处理空链表的情况下面是通用逻辑 33 p_tailp_tail-next; 34 p_tail-nextp_new; 35 p_new-nextphead-next; 36 phead-nextp_new; 37 p_new-datad; 38 return; 39 }这里采用的是头节点没有有效数据头节点不参与环的插入方法若头节点插入环实现起来会相对简单打印环链表41 void clinklist_printf(node_t*phead) 42 { 43 if(pheadNULL) 44 return; 45 node_t*pphead-next; 46 if(pphead) 47 return; 48 if(p-nextp) 49 { 50 printf(%d ,p-data); //此处特殊处理除了头节点只有一个节点的情况下面的通用逻辑也是可以处理的 51 return; 52 } 53 printf(%d ,p-data); 54 pp-next; 55 while(p!phead-next) 56 { 57 printf(%d ,p-data); 58 pp-next; 59 } 60 return; 61 }以头节点指向的首节点作为截止标志来作为结束条件环链表的查找63 node_t* clinklist_find_key(node_t*phead,data_t key) 64 { 65 node_t*pphead-next; 66 if(pphead) 67 return NULL; 68 if(p-datakey) 69 return p; 70 pp-next; 71 while(p-data!key p!phead-next) 72 pp-next; 73 if(p-datakey) 74 return p; 75 return NULL; 76 }环链表的尾删除78 void clinklist_del_tail(node_t*phead) //删除的是头结点指向的首节点的前一个节点 79 { 80 if(pheadNULL || phead-nextphead) 81 return; 82 node_t*pphead-next; 83 while(p-next-next!phead-next) 84 pp-next; 85 node_t*p_delp-next; 86 if(phead-nextp_del) //避免单节点情况下头结点的悬空指针 87 phead-nextphead; 88 p-nextphead-next; 89 free(p_del); 90 }环链表的头删除92 void clinklist_del_head(node_t*phead) 93 { 94 if(pheadNULL || phead-nextphead) 95 return; 96 node_t*p_tailphead-next; 97 while(p_tail-next ! phead-next) 98 { 99 p_tailp_tail-next; 100 } 101 node_t*p_delphead-next; 102 phead-nextp_del-next; 103 p_tail-nextp_del-next; 104 free(p_del); 105 }环链表的销毁107 void clinklist_destroy(node_t**phead) 108 { 109 if(pheadNULL || *pheadNULL) 110 return; 111 if((*phead)-next*phead) 112 { 113 free(*phead); 114 *pheadNULL; 115 return; 116 } 117 if((*phead)-next(*phead)-next-next) 118 { 119 free((*phead)-next); 120 free(*phead); 121 *pheadNULL; 122 return; 123 } 124 node_t*p(*phead)-next-next; 125 node_t*p_del(*phead)-next-next; 126 while(p!(*phead)-next) 127 { 128 pp_del-next; 129 free(p_del); 130 p_delp; 131 } 132 free(p); 133 free(*phead); 134 *pheadNULL; 135 }
延伸阅读

更多相关文章

2026/9/19 19:54:38

CTF杂项解题实战:从文件分析到隐写提取的完整思路

1. 项目概述:一次典型的CTF解题复盘最近在整理过去的比赛记录,翻到了去年参加的一场印象比较深刻的比赛——2022年DASCTF四月赛与FATE联合举办的“防疫挑战赛”。这场比赛的题目紧扣时事,将网络安全知识与“防疫”场景做了不少有趣的结合&…

2026/9/20 16:16:59

Humanizer:消除AI文本机器腔调的关键技术

1. 为什么我们需要Humanizer这个Skill?在AI技术爆发的2024年,一个令人困扰的现象越来越普遍:AI生成内容(AIGC)的"机器腔调"问题。我最近在团队内部做了一次小测试,让10位同事分辨人工撰写和AI生成…

2026/9/19 19:54:42

VMware虚拟机从入门到精通:安装配置与高效使用全攻略

你肯定遇到过这样的情况:想学一门新技术,比如Linux运维,或者想测试一个软件,但不敢直接在自己的主力机上折腾,怕把系统搞崩了。又或者,你需要一个纯净的、可随时重置的Windows环境来运行某些特定程序。这时…

2026/9/21 1:37:27

Excel折线图底层逻辑:从数据结构到业务叙事的七步精调

1. 为什么一张折线图值得花20分钟认真做——从“能画出来”到“让人一眼看懂”的真实差距你有没有过这样的经历:辛辛苦苦把销售数据整理进Excel,选中区域、点插入、选折线图,图表出来了——但老板扫了一眼就说:“这图我看不懂&…

2026/9/21 1:37:27

新闻传播论文的框架怎么搭?按传播要素拆解

写新传论文的人常卡在同一处:材料读了一堆,章节顺序却排不顺,框架搭到一半就散。症结常常不在文笔,而在承重点没先定下来——承重点压在传播链条的哪个要素上,章节顺序、材料摆放、结论落点就跟着换。这一篇只帮你把这…

2026/9/21 1:32:26

厚铜PCB选型避坑指南:从载流到热管理的全链路工程实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/20 0:04:49

GAMP 5 基于风险的计算机化系统验证:软件分类与审计追踪实践

简介:《A Risk-Based Approach to Compliant GxP Computerized Systems》即业内熟知的GAMP 5指南,面向制药企业质量与IT合规人员、验证工程师及计算机化系统管理者,用于解决GxP法规环境下系统合规性难以科学落地的问题。文档以风险管理为主线…

2026/9/20 0:04:49

安全托管MSSP实战:从静态防御到人机协同的攻防运营与应急响应

简介:这份PPT围绕互联网业务安全托管服务展开,面向企业安全负责人、IT运维人员及关注MSSP/MSS选型的读者,重点回应传统安全过度依赖人工、碎片化静态防御难以对抗产业化攻击等痛点。资源共1个pptx文件,包体约30.63MB,以…

2026/9/21 0:02:23

OpenResearch:构建可复现的开放式研究工作流

第一次看到“OpenResearch”这个名字,我脑子里冒出的不是某个具体软件,而更像一种研究方式的宣言:开放、可复现、可验证。这三件事放在一起,其实比大多数人想象中难得多。过去几年我一直在折腾自己的研究工作流,从纯纸…

2026/9/20 4:54:47

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/20 5:01:23

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/20 5:09:33

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码