day 4 链表:两两交换,移除倒数第n个,

文章讲述了如何使用双指针技巧解决链表问题,包括24点交换节点、19移除倒数第n个元素以及160链表相交。特别强调了在未知链表长度情况下使用双指针的方法和环形链表的处理方式,展示了递进的算法思想。
摘要由CSDN通过智能技术生成

24 两两交换链表节点

24和19都需要虚拟节点的哈!

19 移除倒数第n个元素

这里看卡哥的写了一版。就是快指针走n+1步。再让慢指针开走,此时快指针也开始走。直到快指针指到空为止。

看了这个题我其实心里在想为什么不能用一个指针来写。就是直接size-n步就好了。后来我才发现,题目没有告诉size大小,所以要获得这个数字还要先遍历一遍求长度。明白这个点的时候我才加深了对于双指针在这里使用的奥义。

我写了一个指针这个版本的答案在图二。

160 链表相交

在于A组和B组的比较对象是指针,而不是数值。其中在计算出A和B的长度之后有一段是如果lenA>lenB就互换的,是为了保证后面的代码能够顺利运行。

环形链表

数学推理:重点在于慢指针每次走一步,快指针每次走2步。如果走三步,会这样:当n为奇数的时候,右半部分不是一个非负整数,但x是一个非负整数,所以会不满足条件。

之后就是相遇之后找出口,这个比较容易理解。当n=1时,x=z,这个巧妙的发现可以直接令一个index从head再开始。当两个指针碰头的时候就是出口了!

这三道题内容上是层层递进的。

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值