代码随想录训练营Day4|24. 两两交换链表中的节点|19.删除链表的倒数第N个节点|面试题 02.07. 链表相交|142.环形链表II|总结

今天是链表的part2,也结束链表学习

24. 两两交换链表中的节点

  • 不知道为什么一直显示时间超时(原因:给cur赋值时=写成了==)

19.删除链表的倒数第N个节点

  • 思路很重要
  • 看卡尔的思路前我只能想到先遍历统计有多少元素,然后第二遍遍历删除
  • 卡尔的思路:双指针,slow和fast之间相隔n,当fast达到末尾时,slow端可以进行删除操作了
  • 删除节点时,应该在被删除节点的前一个节点停下操作

面试题 02.07. 链表相交

  • 差取绝对值的函数:abs()
  • 交点并不是数值相等,而是指针相等!!!指向同一个内存
  • 先分别求出两个链表的长度,然后用上一题的方法
  • 这题细节很多,比如如果不相交,那么直接返回NULL或者nodeEnd->next,而不要返回ListNode* nullNode = new ListNode(),在这种情况下返回的是相交于0!!!!

142.环形链表II

  • 这道题很考验数学思路,虽然写过一次,但还是不记得

  • 双指针法:
  • fast一次走两个,slow一次走一个,总会在环里相遇

  • 相遇后,index1从head出发,index2从相遇点出发,一次走一个,最后会在环入口相遇

  • 注意,fast和slow都是从head开始,而不是从head前一个虚拟节点开始(从虚拟节点开始则不行)

  • 若无环,则会出现fast and fast.next == None

  • 时间复杂度为O(n),空间复杂度均O(1)

总结

  • 主要是链表用得少,理论知识不牢固,要多记
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值