2022-09-24算法训练Day4

今日任务

24. 两两交换链表中的节点

19.删除链表的倒数第N个节点

面试题 02.07. 链表相交

142.环形链表II

总结

开始做啦

(1)24. 两两交换链表中的节点

24. 两两交换链表中的节点 - 力扣(LeetCode)

两个重点:

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.

学习了。

刷了几天题,进步还是很明显的。加油继续。


(四)今天最后一个任务环形链表,有点烧脑,明天来看。

你可能感兴趣的:(2022-09-24算法训练Day4)