Day4 24两两交换 19 删除倒数n 02.07链表相交 142环形链表
作业条:
24. 两两交换链表中的节点
题目链接:
https://leetcode.cn/problems/swap-nodes-in-pairs/
视频讲解
https://www.bilibili.com/video/BV1YT411g7br/
第一想法
直接对两个相邻链表指针进行反转,但是到反转下两个的时候发现不太对,因为第一个没办法指向第三个
看完解答后的想法
思路要用第一个操作后面两个节点,而不仅仅是对两个节点的操作
- 什么时候需要考虑加dump head?
- 判断循环终止的条件到底是cur不为空还是cur->next不为空:当链表为奇数的时候是cur->next->next为空结束,当链表为偶数是cur->next为空结束
- 下一次循环只需要把cur赋值为cur->next->next就可以,不用管是不是交换过了值
实现过程中的问题
主要注意循环条件
19. 删除链表的倒数第 N 个结点
题目链接:
https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
文章讲解
https://programmercarl.com/0019.%E5%88%A0%E9%99%A4%E9%93%BE%E8%A1%A8%E7%9A%84%E5%80%92%E6%95%B0%E7%AC%ACN%E4%B8%AA%E8%8A%82%E7%82%B9.html#%E6%80%9D%E8%B7%AF
视频讲解
https://www.bilibili.com/video/BV1vW4y1U7Gf/?spm_id_from=333.788
第一想法:
只是有印象要用快慢指针,但是具体怎么用忘记了。还以为是直接一个指针走到size-n的位置,但是链表没有具体的size,所以需要遍历两遍;
但是快慢指针,快指针先走,慢指针再走,其实也是遍历两遍;
看完解答后的想法:
看完解答之后发现只需要让快指针多走就可以了。
- 怎么确定快指针要走快多少步
- 循环终止条件
- 需不需要dumphead: 需要
快指针比慢指针走快n+1步,并且快指针不为空;
快指针比慢指针走快n步,并且快指针->next不为空;
这两个判断条件一样吗?一样的,两种写法都可以。
实现过程中的问题:
无
面试题 02.07. 链表相交
题目链接:
https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/
视频讲解
第一想法
用两个指针分别指向两个链表,当遍历完自己之后去遍历对方,最终两个指针如果相等就是相交的节点。
看完解答后的想法
想法一致
实现过程中的问题
循环结束条件:当两个链表相交的时候,结束条件为指针相同;当两个链表不相交的时候,最终两个指针的值也会相同并且为null
今日收获和学习时长
3h