24. 两两交换链表中的节点
1.自己思路:两两一组 每组操作流程一样 只需要实现一组逻辑即可
2.题解思路:其实真正是三个一组 那么从虚拟头节点开始 while循环进行每次操作 注意循环终止条件!!!两种情况 奇数与偶数
第一次编写 输出漏掉了参数 原因是此时的第三个节点丢失cur->next->next->next 因为此时这个表示因为前面的赋值已经修改了 所以需要记录第三个节点
第二次错误 判断条件错误 应该是与而不是或 或的话while操作会变成空指针
改正后pass
19.删除链表的倒数第N个节点
1.自己思路: 删除链表操作已知 困难点在于怎么根据N 来判断循环次数
2.题解思路:巧妙!!!使用两个遍历节点 一个为fast 一个为slow 快节点先走n+1步 然后快慢节点一点循环直到快节点走到null 为什么是n+1 因为删除第n个节点 需要移动到n-1个节点那
第一次写错误 注意fast走n步得fast不为null 防止特殊情况 第二个判断条件为fast != NULL 则fast走到尾 这里可以草稿纸上自己画图理解一下次数
改正后pass
面试题 160. 链表相交
1.自己思路: while循环一直遍历 但是得注意特殊情况 否则会出现空指针 通过率百分之50
2.题解思路:
1.计算出两个链表的长度 然后比较长度 让长的向短看齐(原因是这样while循环时 就可以在一个循环里 而不是两个链表循环次数不同)
第一次写 pass 个人感觉关键点在于想到把两个链表变成同一长度 然后进行while循环
环形链表II
1.自己思路:可以定义快慢指针 然后快的相对速度比慢的多1个 这样不会出现漏掉情况 后续没有有效思路 失败!!!
2.题解思路:
1.想出用快慢指针思路
2.分解各部分的长度 得出相等公式 然后得出想要求的长度对应的值
3.难点在于理解到 快慢指针相遇后 再进行绕圈 此时若和从头开始一直向后走的遍历指针相等 则代表是入环点