今日任务
24. 两两交换链表中的节点
19.删除链表的倒数第N个节点
面试题 02.07. 链表相交
142.环形链表II
总结
开始做啦
(1)24. 两两交换链表中的节点
两个重点:
1.要用虚拟头节点,pre保存当前的前一个节点
2.保存当前交换的两个节点的后边的所有节点到temp中。
3.pre往后移动两个节点,cur往后移动两个节点
4.判断的时候while(cur!=nullptr&&cur->next!=nullptr)这样保证了无节点和奇数节点能够直接返回,无须交换。
单独完成的感觉真好。但还是要与大神对比代码!向优秀代码学习。
(二)19.删除链表的倒数第N个节点
我用的是笨方法,先遍历一遍看有多少个节点,再去找倒数第n个的前一个节点删除。方法好笨。
直接上复制的大神的方法。快慢指针法。
1.一个走的快的指针,一个走的慢的指针,快指针比慢指针快n步,然后一起往前走,当快指针走到头的时候,慢指针就是倒数第n个指针。当然,快指针需要再多一步,因为我们要找到倒数第n个指针的前一个节点才能去删除目标节点。
(三)面试题 02.07. 链表相交 - 力扣(LeetCode)
思路是对的,
先分别遍历求出链表A,链表B的长度。
再来把较长的一个链表移动到和另外一个短链表一样的长度。然后进行比较,找到相同的节点,返回即可。
卡哥的亮点在于:
1.较长的那个存放在curA,如果b长,就交换。
2.比较的时候不是val的相等,而直接是比较curA == curB.
学习了。
刷了几天题,进步还是很明显的。加油继续。
(四)今天最后一个任务环形链表,有点烧脑,明天来看。