力扣题目:24.两两交换链表中的节点
刷题时长:15min
问题总结
- While条件判断报Nonetype error。此题只判断cur.next.next != None 不够,还需要考虑到落单节点,while需同时满足 cur.next != None才能避免指针走到none。
本题收获
- 做链表题,画草图将很有帮助,尤其是需要模拟的题
- 运用两个temp变量存储节点指针
力扣题目:19.删除链表的倒数第N个节点
刷题时长:暴力法遍历10min,双指针法5min
问题总结
- 题关链表大小长度倒数,只想到了用指针暴力遍历记录长度,未想出双指针法
本题收获
- 利用双指针,即快慢指针解决无索引数据结构下的倒数问题
力扣题目:面试题02.07.链表相交
刷题时长:暴力法双循环35min,双指针法20min
问题总结
- 暴力法双循环,测试案例通过,但提交后超时限
- 当cur = 真head,while条件需同步改为 cur != None,而非cur.next!=None
- 用了两个if判断后重复写码。由于两个链表长度不同将需要对应更改变量顺序,此时可以用一个if判断后,swap对应变量值来贴程序的思路。
本题收获
- 利用双指针,即快慢指针解决无索引数据结构下的倒数问题
- 不做添加/删除节点操作,无需定位前一节点时,可以不创建dummy head。
- cur = 真head 需搭配 while cur != None
- 用一个if代替两个if和重复代码
力扣题目:142. 环形链表II
刷题时长:参考题解思路后写码15min
问题总结
- 思路卡住,无法判断链表是否循环,无法找到循环入口。
本题收获
- 判断链表是否循环:双指针法,设置快慢指针的相对速度差1,若能相遇则为循环。
- 找到循环入口位置:数学推算法,快慢指针相遇时,快指针移动距离是慢指针的两倍。
- 理解思路后写码流畅,从题解代码学习到虽然快指针一下走两步,但while条件只需要判断下一个节点不为空即可,无需判断后两个节点。