Windows平台Android应用安装神器:APK-Installer全面解析与实战指南
2026/4/19 11:19:16
🔥小龙报:个人主页
🎬作者简介:C++研发,嵌入式,机器人等方向学习者
❄️个人专栏:《C语言》《【初阶】数据结构与算法》
✨永远相信美好的事情即将发生
链表是 C 语言和数据结构学习的核心考点,也是编程入门绕不开的经典题型。本文聚焦删除指定值节点、反转链表、查找中间节点三大高频链表题,从算法原理到代码实现逐拆解,用通俗易懂的逻辑和清晰的代码示例,帮你吃透链表操作的核心思路。掌握这些基础题型,不仅能夯实指针功底,更能为后续复杂数据结构学习筑牢根基。
链接:删除链表中等于给定值 val 的所有节点
创建一个新链表,遍历原链表,把不等于val值尾插到新链表中最后返回新链表
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedefstructListNodeListNode;structListNode*removeElements(structListNode*head,intval){ListNode*newhead=NULL;ListNode*newtail=NULL;ListNode*pcur=head;while(pcur){if(pcur->val!=val){if(newhead==NULL)//链表为空newhead=newtail=pcur;else{newtail->next=pcur;newtail=pcur;}}pcur=pcur->next;}if(newtail)newtail->next=NULL;returnnewhead;}链接:反转链表
注1:n3会最先指向NULL所以要特判;
注2:链表可能为空,为空直接返回;
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedefstructListNodeListNode;structListNode*reverseList(structListNode*head){//链表 为空if(head==NULL)returnhead;ListNode*n1=NULL;ListNode*n2=head;ListNode*n3=head->next;while(n2){n2->next=n1;n1=n2;n2=n3;if(n3)n3=n3->next;}returnn1;}链接:链表中间节点
核心思想:快慢指针(2*slow == fast)
注意:不能fast->next && fast当遇到偶数链表会造成对空指针解应用
/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */typedefstructListNodeListNode;structListNode*middleNode(structListNode*head){ListNode*slow=head;ListNode*fast=head;while(fast&&fast->next){slow=slow->next;fast=fast->next->next;}returnslow;}✨本文解析链表三大高频题型:删除指定值节点、反转链表、查找中间节点。通过新链表尾插法实现删除操作;利用三指针法逐步反转链表;采用快慢指针高效定位中间节点。代码示例清晰,附详细算法原理图解,帮助掌握链表核心操作逻辑。这些基础题型是提升指针运用能力和数据结构理解的关键,建议结合图示反复练习。