位置: 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)

  • 品牌究竟需要怎样的DMP?(品牌最需要什么)

    品牌究竟需要怎样的DMP?(品牌最需要什么)

  • 朋友圈部分人可见别人能看到吗(朋友圈部分人可见后面可以再公开吗)

    朋友圈部分人可见别人能看到吗(朋友圈部分人可见后面可以再公开吗)

  • 腾讯课堂后台播放是否在听课状态

    腾讯课堂后台播放是否在听课状态

  • 全民k歌怎么关闭微信好友(全民k歌怎么关闭自动续费会员)

    全民k歌怎么关闭微信好友(全民k歌怎么关闭自动续费会员)

  • 微信登录失败代码10003(微信登录失败代表什么?)

    微信登录失败代码10003(微信登录失败代表什么?)

  • 小米手机怎么自定义应用图标(小米手机怎么自检)

    小米手机怎么自定义应用图标(小米手机怎么自检)

  • 微信缓存图片在哪个文件夹(微信图片保存在哪个文件夹)

    微信缓存图片在哪个文件夹(微信图片保存在哪个文件夹)

  • ipad出现一个框按不了(ipad出现一个框怎么取消)

    ipad出现一个框按不了(ipad出现一个框怎么取消)

  • 手机老是发烫怎么办(手机老是发烫怎么解决)

    手机老是发烫怎么办(手机老是发烫怎么解决)

  • 手机录的视频是mp4格式吗(手机录的视频是横的怎么能正过来)

    手机录的视频是mp4格式吗(手机录的视频是横的怎么能正过来)

  • wps支持平滑切换吗(wps平滑切换效果不顺畅)

    wps支持平滑切换吗(wps平滑切换效果不顺畅)

  • 图片紧密型环绕怎么弄(图片紧密型环绕和嵌入型有何区别)

    图片紧密型环绕怎么弄(图片紧密型环绕和嵌入型有何区别)

  • 苹果突然重启是为什么(苹果突然重启是什么原因)

    苹果突然重启是为什么(苹果突然重启是什么原因)

  • 苹果手机电信版能用移动卡吗(苹果手机电信版本区别)

    苹果手机电信版能用移动卡吗(苹果手机电信版本区别)

  • iphone7如何分屏(iphone7如何分屏打游戏)

    iphone7如何分屏(iphone7如何分屏打游戏)

  • vivos1prootg是什么(vivos1手机ot g在哪儿打开)

    vivos1prootg是什么(vivos1手机ot g在哪儿打开)

  • 小米手环4充满要多久(小米手环4充满电会提示吗)

    小米手环4充满要多久(小米手环4充满电会提示吗)

  • 手机怎么给软件改名(手机怎么给软件添加信任)

    手机怎么给软件改名(手机怎么给软件添加信任)

  • 百度地图截图怎么截(百度地图截图怎么弄)

    百度地图截图怎么截(百度地图截图怎么弄)

  • qq群怎么升级(qq群怎么升级群人数)

    qq群怎么升级(qq群怎么升级群人数)

  • 手机锁屏怎么开手电筒(手机锁屏怎么开热点)

    手机锁屏怎么开手电筒(手机锁屏怎么开热点)

  • 抖音怎么设置看完整视频(抖音怎么设置看别人主页不被发现)

    抖音怎么设置看完整视频(抖音怎么设置看别人主页不被发现)

  • 抖音为什么拖不动进度条(为什么抖音不好使)

    抖音为什么拖不动进度条(为什么抖音不好使)

  • 抖音订单怎么退款(抖音订单怎么退不了款)

    抖音订单怎么退款(抖音订单怎么退不了款)

  • 美团删除的订单怎么恢复(美团删除的订单可以恢复吗)

    美团删除的订单怎么恢复(美团删除的订单可以恢复吗)

  • 如何修复Windows 11中损坏的注册表项? Win11修复损坏的注册表项方法(如何修复windows11无法的注册表值)

    如何修复Windows 11中损坏的注册表项? Win11修复损坏的注册表项方法(如何修复windows11无法的注册表值)

  • Vue如何启动项目(vue项目如何启动运行)

    Vue如何启动项目(vue项目如何启动运行)

  • 小微企业印花税怎么算
  • 营业外收支的账务处理
  • 代开普通发票需提供哪些材料
  • 结转固定资产清理的会计科目
  • 小微小型微利企业减按20%的所得税税率征收企业所得税
  • 城市建设税和教育费附加计算公式
  • 应付账款的进项税分录
  • 银行汇票转给第三方怎么操作
  • 增值税普通发票和电子普通发票的区别
  • 购入的苗木种植一段时间后再销售要交增值税吗?
  • 对子公司进行增资
  • 金税盘没票了
  • 消费型增值税计算公式
  • 新契税法还有优惠吗?
  • 一般纳税人免税申报表怎么填
  • 有哪些不同类型的金融机构
  • 1697510302
  • ping命令出现unreachable
  • 行政单位上年支出退回
  • 右击任务栏启动怎么关闭
  • win10组策略关闭defender
  • 瓦尔德内尔精彩
  • php魔术函数
  • 阿德莱德 景点
  • React hooks中 useState踩坑-=--异步问题
  • 信用减值损失属于损益类科目吗
  • 备抵法会计分录
  • 工会经费计提分录怎么写
  • 10qps是多少并发
  • 《linux内核分析》
  • 前端不使用明文密码方案
  • set_ccopt_property
  • 发票过期未认证可以用吗
  • 个税少报了能查出来吗
  • 工资表社保表格怎么算
  • 3步搞定纯真ip数量
  • 实际发生坏账损失不影响应收账款
  • 出口退税在贷方,之后还交税吗
  • 售后回购会计处理分录
  • 企业的主要经营指标有哪些
  • 哪些凭证是免纳税的
  • 安装sql server 2005,安装不成功怎么设置
  • 建筑工程租赁费属于什么费用
  • 结转成本类账户及税金及附加到本年利润
  • 小规模纳税人企业所得税怎么算
  • 没有抄税会导致什么情况
  • 预付账款收到发票
  • 技术服务费怎么交税
  • 法人网上变更流程
  • 机票行程单改签费抵扣 税务局
  • 不能抵扣的进项税额转出会计分录
  • 跨年补提城建税
  • mysql8.0设置字符集编码
  • Slave memory leak and trigger oom-killer
  • sql server存储过程写法
  • linux常用命令sed
  • linux快速清空大日志文件
  • docker 自启动
  • 清华同方bios通用密码(thtfpc)
  • 微软每月补丁更新一般于什么时间发布
  • 萝卜家园和番茄花园哪个好
  • linux源码安装软件的方法介绍
  • win8设备安装
  • 在对linux系统中dir
  • win7更改ip地址后有网络无法上网
  • linux 11
  • 2015.3.25--2.cocos精灵移动 动画控制(一)
  • node. js教程
  • jquery中ajax处理跨域的三大方式
  • unity 摄像机
  • 游戏客服怎么跟客户聊天
  • 写给小白的情书
  • pycharm flask框架
  • 天津租房网个人房源出租
  • 外经证办理流程在哪个网站申请
  • 税控盘服务费必须每年交吗为什么
  • 重庆国税税务局官网
  • 慰问金能直接转账吗
  • 零税率,免税不免增值税
  • 税控机发票打印机怎么用
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设