【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点
创始人
2024-05-28 11:50:10
0

目录

一.【Leetcode203】移除链表元素

1.链接

2.题目再现

 A.双指针法

B.类尾删法

C.哨兵位

二.【Leetcode876】链表的中间节点

1.链接:链表的中间节点

2.题目再现

3.解法:快慢指针

三.链表中倒数第k个节点

1.链接:链表中倒数第k个节点

2.题目再现

3.解法 :快慢指针


一.【Leetcode203】移除链表元素

1.链接

移除链表元素

2.题目再现

 A.双指针法

1.创建一个指针 cur=head  和一个指针  pre=NULL;  

2.用cur->val 与 val 比较,如果不相等则把 cur 赋给 pre 使cur 指向下一个节点,即

   cur=cur->next;

3.如果相等则使 pre 的 next 指向 cur 的 next ,即:

 pre->next=cur->next ,然后再 free 掉 cur ,最后再使 cur 等于 pre 的 next,注意在进行这些步骤之前要判断 pre 是否为空 ,若为空即为头删;

演示:

双指针

代码:

struct ListNode* removeElements(struct ListNode* head, int val) 
{struct ListNode*pre=NULL;struct ListNode*cur=head;while(cur){if(cur->val!=val){pre=cur;cur=cur->next;}else {if(pre==NULL){head=cur->next;free(cur);cur=head;}else {pre->next=cur->next;cur=pre->next;}}}return head;
}

B.类尾删法

1.创建一个新的指针newhead ,同时为了省去找尾的麻烦,我们可以定义一个尾指针 tail 来保存尾节点;

2.再创建一个指针 cur =head ,用来遍历链表;

3.如果 cur->val != val ,则尾插 ,注意要判断 tail 是否为空 ,类似于单链表的尾插那部分,如果不理解的话,可查看文章 :单链表的增删查改;

4.如果 cur->val ==val,则 cur=cur->next ;

5.最后要将尾节点置空。

演示:

类尾插

代码:

struct ListNode* removeElements(struct ListNode* head, int val) 
{struct ListNode *newhead=NULL;struct ListNode*tail=NULL;struct ListNode*cur=head;while(cur){if(cur->val!=val){if(tail==NULL){newhead=tail=cur;}else {tail->next=cur;tail=tail->next;}cur=cur->next;}else{cur=cur->next;}}if(tail){tail->next=NULL;}return newhead;
}

C.哨兵位

1.malloc 一个哨兵位节点 dummyhead,使其 next 指向 head ;

2.再定义一个节点 tmp = dummyhead ,用这个遍历链表;

3.注意因为 tmp ->next 才是 head ,所以 while 里要写 tmp->next !=NULL

演示:

移除链表元素 哨兵位法动态演示

代码:

struct ListNode* removeElements(struct ListNode* head, int val) 
{struct ListNode*dummyhead=(struct ListNode*)malloc(sizeof(struct ListNode));dummyhead->next=head;struct ListNode*tmp=dummyhead;while(tmp->next!=NULL){if(tmp->next->val==val){tmp->next=tmp->next->next;}else {tmp=tmp->next;}}return dummyhead->next;
}

二.【Leetcode876】链表的中间节点

1.链接:链表的中间节点

2.题目再现

3.解法:快慢指针

1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head;

2.遍历链表,快指针一次走2步,慢指针一次走1步 ;

3.注意:因为链表的长度可能是单数也可能是双数,所以当我们已 fast 是否为NULL 作为循环控制条件的话,要在 fast 走2步前判断 fast->next 是否为空;

4.最后慢指针就是中间节点。

演示:

链表中间节点 快慢指针动态演示

代码:

struct ListNode* middleNode(struct ListNode* head)
{struct ListNode*slow=head;struct ListNode*fast=head;while(fast){if(fast->next==NULL)  //注意判断{break;}else{fast=fast->next->next;  //fast 走2步}slow=slow->next;   //slow 走1步}return slow;  //返回慢指针
}

三.链表中倒数第k个节点

1.链接:链表中倒数第k个节点

2.题目再现

3.解法 :快慢指针

1.定义一个快指针 fast 和一个慢指针 slow 都初始化为 head;

2.因为倒数第k个节点和尾节点的差为 k-1  ,所以我们先让快指针先走 k-1 步;

或者因为尾节点所指向的NULL 和倒数第k个节点相差k,也可以先让快指针走k步;

这个时候慢指针不动;

3.快指针走完后,快指针和慢指针依次走,每次只走1步;

注意,如果是k-1,那么遍历结束的条件是fast->next 是否为空 ,如果是k,那么遍历结束的条件是fast 是否为空;

4.返回慢指针。

演示:

链表倒数第K个节点 快慢指针动态演示

代码:

struct ListNode* FindKthToTail(struct ListNode* pListHead, int k )
{if(pListHead==NULL){return NULL;}struct ListNode*slow=pListHead;struct ListNode*fast=pListHead;while(k--)  //这里以先走k步为例{if(fast==NULL){return NULL;}fast=fast->next;}while(fast){slow=slow->next;fast=fast->next;}return slow;
}

😽本篇文章到此就结束了,若有错误或是建议,欢迎小伙伴们指出;😻

😍请多多支持博主哦~🥰

🤩谢谢你的阅读~😃

相关内容

热门资讯

商务部回应美对我海事、物流、造... 转自:沈阳日报  新华社北京2月23日电 商务部新闻发言人23日就美对我海事、物流、造船等领域宣布拟...
在建设现代化产业体系中挑大梁 转自:沈阳日报  □本报评论员  在东北全面振兴的宏大实践中,沈阳始终是撬动全局的战略支点。  市委...
沈阳俄罗斯风情街马戏场馆项目签... 转自:沈阳晚报  本报讯(沈阳晚报、沈阳发布客户端记者李莉)为积极推进文化旅游产业发展,加速建设俄罗...
沈阳地区累计发送旅客513万人... 转自:沈阳日报  2025年铁路春运于2月22日正式落下帷幕。在此期间,沈阳各大火车站共发送旅客51...
平谷出台教育高质量发展措施   本报讯(记者 牛伟坤)建设5所特色学校,打造4个教育集团,加强教师队伍建设……平谷区教委日前发布...
老张和他的“龙” 转自:沈阳日报  □新华社记者 于也童  80岁的张仲发目不斜视地盯着手机,眼神跟随着屏幕里儿子张振...
沈阳各火车站发送旅客513万人... 转自:沈阳晚报  2025年铁路春运于2月22日正式落下帷幕。在此期间,沈阳各大火车站共发送旅客51...
叩问生命的本质(图) 转自:天津日报  基因技术正以前所未有的速度重塑人类对生命的认知。在这场波澜壮阔的科技革命中,中国科...
多家医院新开门诊   本报讯(记者 孙乐琪)近日,北京儿童医院、北京地坛医院、北京回龙观医院、北京清华长庚医院分别新开...
多座火车站春运旅客量创新高   各客运站设置爱心服务窗口等,提升旅客候乘体验。  本报讯(记者 胡子傲 通讯员 张雍 董策 冯彦...
保利·盛京大剧院青少年交响乐团... 转自:沈阳日报  本报讯(沈阳日报、沈报全媒体记者盖云飞)2月22日晚,“星河下的旋律”——保利·盛...
守护民生消费 “铁拳”在行动 转自:沈阳日报  2月20日,市市场监管局公布2025年第一批民生领域案件查办“铁拳”行动典型案例,...
中国古代海洋文明的基本特性   黄纯艳  海洋文明是中华文明的有机组成部分。中国海洋史研究自20世纪二三十年代以来,已积累了宏富...
北京民族乐团以音符诠释万物萌发   本报讯(记者 韩轩)在指挥家张列的执棒下,北京民族乐团日前在国家大剧院上演《中华四季·雨水》音乐...
乡村小路清出250方废弃物   2月14日,本报以《600余米小路旁出现易燃垃圾带》为题,反映了诸葛营南公交站附近环境脏乱和消防...
180户居民告别临时电   维修工人昼夜施工。  近日,密云区鼓楼街道宾阳西里社区世纪家园小区A座的居民终于告别了临时电。 ...
孙海洋携子归家,他们一家人相聚... 孙海洋携子归家,他们一家人相聚的场面为何会令众人泪目?因为他们一家人为了寻找一个孩子付出了很多的辛苦...
老师就像冬天里太阳,夏天的云朵... 老师就像冬天里太阳,夏天的云朵什么意思?老师像冬天里的太阳,说明老师在严厉中给予我们温暖,给予我们知...
我撞鬼了! 我撞鬼了!楼主可以念诵“阿弥陀佛”“观自在菩萨”“大势至菩萨”或者“唵嘛呢叭咩吽”或者《大悲咒》《楞...
进化狂潮有动漫吗 进化狂潮有动漫吗没有。有漫画,讲的是段飞在前世死亡后竟重生回到20年前,在那一场病毒浩劫之前几小时关...