第四天:链表part02
LC24两两交换链表中的节点
- 不是很熟悉,原因分析;
-
对链表的虚拟节点设置不是很敏感
-
对边界条件cur!=null考虑不全面,只考虑到的cur.next!=null
-
- 代码:
LC19删除链表的倒数第N个节点(未掌握)
- 未掌握分析:没能快速想到双指针的应用,错误思路是翻转链表再删除再反转
- 解题思路:双指针+虚拟节点
- 双指针:先让fast移动n步,然后让fast和slow同时移动,删除slow指向的节点
- 加入虚拟节点,方便删除,让slow最终指向目标节点的前一个节点
- 先让fast移动n+1步,然后同时移动fast和lsow
- 代码
LC-面试题02.07.链表相交(超时1min)
- 超时原因分析:对代码掌握的不够熟练,还需要多加练习
- 对num进行计数的时候,不能直接在headA和headB上进行操作,会丢失头节点信息
- 不能忘记判断a和b在最后是否相等,如果不相等说明两条链表一定不相交
- 代码:
LC142环形链表II(未掌握)
- 未掌握分析:已经第二次刷这道题了,之前就在相同的地方卡住,现在又在相同的地方卡住
- 错误1:将fast和slow都设置为head,那么接下来的循环将失效,因为fast恒等于slow
- 错误2:由错误1衍生,slow和fast的初始化问题,既然不能初始化为head,那么就初始化为下一轮循环中的位置,即slow=head.next,fast=head.next.next
- 错误3:由错误2衍生,slow初始化为head.next,fast初始化为head.next.next,那么需要判断head.next.next为null的情况,需要在最开始进行判断
- 错误代码:
- 正确代码: