位置: IT常识 - 正文

【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点(iterator用法 移除对象)

编辑:rootadmin
【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点

推荐整理分享【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点(iterator用法 移除对象),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:iterator移除元素,list 移除,移除list1中所选中的项目,iterator移除元素,list移除一个指定元素,移除list1中所选中的项目,移除list1中所选中的项目,leetcode移除元素,内容如对您有帮助,希望把文章链接给更多的朋友!

目录

一.【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 ,用这个遍历链表;

【Leetcode】移除链表元素 链表的中间节点 链表中倒数第k个节点(iterator用法 移除对象)

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;}

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

😍请多多支持博主哦~🥰

🤩谢谢你的阅读~😃

本文链接地址:https://www.jiuchutong.com/zhishi/299785.html 转载请保留说明!

上一篇:未来社区的人车房隐私数据权属确认方法(未来社区政策支持)

下一篇:又一个开源第一!飞桨联合百舸,Stable Diffusion推理速度遥遥领先(开源ei)

  • 小米手环6nfc怎么绑定公交卡(小米手环6nfc怎么看微信消息)

    小米手环6nfc怎么绑定公交卡(小米手环6nfc怎么看微信消息)

  • 三星buds2怎么佩戴检测(三星buds2怎么换连接新手机)

    三星buds2怎么佩戴检测(三星buds2怎么换连接新手机)

  • 腾讯视频竖屏怎么调成横屏(腾讯视频竖屏怎么变横屏)

    腾讯视频竖屏怎么调成横屏(腾讯视频竖屏怎么变横屏)

  • 苹果11几个版本(苹果14各版本区别)

    苹果11几个版本(苹果14各版本区别)

  • 快手小店退款多久能到账(快手小店退款多怎么办)

    快手小店退款多久能到账(快手小店退款多怎么办)

  • oppor15换了屏不能指纹解锁(oppo手机换屏以后屏幕失灵)

    oppor15换了屏不能指纹解锁(oppo手机换屏以后屏幕失灵)

  • 为什么微信提现要人脸识别(为什么微信提现被限制了)

    为什么微信提现要人脸识别(为什么微信提现被限制了)

  • 飞猪行程单怎么打印(飞猪行程单怎么邮寄)

    飞猪行程单怎么打印(飞猪行程单怎么邮寄)

  • 主板vga灯亮 无法开机(主板vga灯亮无开机画面)

    主板vga灯亮 无法开机(主板vga灯亮无开机画面)

  • 主机和外部设备构成了计算机的(微机硬件系统分为主机和外部设备)

    主机和外部设备构成了计算机的(微机硬件系统分为主机和外部设备)

  • 苹果11亮度调到最高还是很暗(苹果11亮度调到最低会出现斜杠吗)

    苹果11亮度调到最高还是很暗(苹果11亮度调到最低会出现斜杠吗)

  • 用笔记本上网课需要麦克风吗(用笔记本上网课怎么开摄像头)

    用笔记本上网课需要麦克风吗(用笔记本上网课怎么开摄像头)

  • 对方的电话一直在通话中是怎么了(对方的号码一直在通话中)

    对方的电话一直在通话中是怎么了(对方的号码一直在通话中)

  • 国内流量畅享是什么意思(国内流量畅享是无限流量吗)

    国内流量畅享是什么意思(国内流量畅享是无限流量吗)

  • 显示屏没信号什么原因(显示屏显示无信号就不亮了)

    显示屏没信号什么原因(显示屏显示无信号就不亮了)

  • 如何关闭开发者模式(如何关闭开发者选项模式OPPO)

    如何关闭开发者模式(如何关闭开发者选项模式OPPO)

  • 电话卡停机不缴费会怎样(手机卡停机不交钱会怎么样)

    电话卡停机不缴费会怎样(手机卡停机不交钱会怎么样)

  • vue怎么放慢速度(vue慢动作怎么操作)

    vue怎么放慢速度(vue慢动作怎么操作)

  • 被锁定的文档怎么修改(被锁定的文档怎么导入Goodnotes)

    被锁定的文档怎么修改(被锁定的文档怎么导入Goodnotes)

  • 手机流量慢为什么(为啥手机流量慢)

    手机流量慢为什么(为啥手机流量慢)

  • 京东退换货运费谁承担(京东退换货运费险)

    京东退换货运费谁承担(京东退换货运费险)

  • excel另存为在哪里(excel另存为在哪里2010)

    excel另存为在哪里(excel另存为在哪里2010)

  • 苹果a2223是什么型号(苹果手机a2223是什么)

    苹果a2223是什么型号(苹果手机a2223是什么)

  • 网络电视怎么找中央1(网络电视怎么找不到搜索栏)

    网络电视怎么找中央1(网络电视怎么找不到搜索栏)

  • 华为手环b3能测血压吗(华为手环b3能测心率吗)

    华为手环b3能测血压吗(华为手环b3能测心率吗)

  • 华为nova发热严重吗(华为nova发热严重是什么原因)

    华为nova发热严重吗(华为nova发热严重是什么原因)

  • 抖音如何确定限流(抖音的限制)

    抖音如何确定限流(抖音的限制)

  • 华文中宋是什么字体(华文中宋是什么字体是新宋体)

    华文中宋是什么字体(华文中宋是什么字体是新宋体)

  • 一刀9999亿怎么彻底卸载(一刀999是什么游戏)

    一刀9999亿怎么彻底卸载(一刀999是什么游戏)

  • 发票可不可以盖财务专用章
  • 个体工商户季度不超过30万免增值税吗
  • 增值税纳税申报表模板
  • 个税申报系统累计收入怎么算
  • 作为一个财务 月末要做什么
  • 银行利息税是多少2021
  • 净利润提盈余公积
  • 耕地占用税如何申报缴纳
  • 计提坏账准备,坏账准备是增加还是减少
  • 公司取得增值税怎么算
  • 个人所得税扣除的
  • 专票进项税可以抵扣几个月以前的
  • 农产品收购发票上的买价含税吗
  • 未办理土地使用证违反了什么法律
  • 公司向个人租车协议范本
  • 企业购置房产交什么税
  • 财务杠杆系数简单计算方法
  • 去银行打回单需要带身份证吗
  • 支付给外单位的押金是其他应收款吗
  • 利润表中的减是什么意思
  • win11如何安装安卓app
  • 增值税留抵税额在借方还是贷方
  • 其他货币资金包括哪些项目
  • 建筑公司分包
  • 公司成立之初
  • win10应用图标怎么调出来
  • PHP:pg_cancel_query()的用法_PostgreSQL函数
  • 在认缴期限内未出资是否违法
  • 外籍人员个税免征吗
  • 计提坏账可以冲回吗
  • 前端架构怎么搭建
  • 免征增值税的范围有
  • 以固定资产投资的会计处理
  • 税务登记投资总额和注册资本一样吗
  • php表单内容写入txt
  • tf fans club
  • 下载下来是php
  • php依赖注入的三种方式
  • ls命令的作用
  • c语言二级指针详解
  • 火车票的进项税率
  • 邮电局上级部门
  • 预算凭证可以单张打印吗
  • mysql的union语句
  • 织梦栏目描述调用
  • 发票冲红如何进入系统
  • 用友u8固定资产减少怎么撤销
  • sql dbo
  • 公司注销了,账务是不是可以销毁了
  • 股票手续费如何计算公式
  • 对公账户有法律效力吗
  • 企业销售收入的确认应具备哪些条件
  • 金税盘数据迁移到税务ukey
  • 电子发票和增值税发票有什么区别
  • 收到所得税退税怎么做账务处理
  • 长投对方亏损
  • 17增值税发票怎么抵扣
  • 注册资本和实收资本相等吗
  • 企业租赁厂区的管理制度
  • 重装系统注册表会重置吗
  • win7系统桌面图标不见了右键无反应
  • mac音频设置在哪里
  • linux深入理解
  • wp_official_1.1.3.apk软件下载
  • win8系统本地连接在哪
  • ubuntu虚拟机怎么联网
  • win7把声音设备禁用了怎么要回来
  • 怎样取消进windows 密码
  • ubuntu linux指南:基础篇
  • xp系统如何更新
  • win8和win10怎么共享文件
  • linux vmware命令行
  • win7系统迁移到另一磁盘
  • win8启动蓝屏
  • 使用jquery mobile时,jquery文件必须
  • jquery cookie使用
  • layout_gravity与gravity的区别
  • 简单的移动端项目
  • 北京市网上税务局(自然人版)
  • 钢材出口关税税率是多少
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设