24. 两两交换链表中的节点
由于两两交换是一个固定重复的操作,所以这里使用递归调用,采用next指向递归调用的写法。
19.删除链表的倒数第N个节点 (>10min)
示例 2:
输入:head = [1], n = 1 输出:[]
对于这个测试用例,难一点,因为头结点就是要删除的对象,你返回的时候不能直接返回head,可以返回head.next.
160.相交链表
两边交替走就可以,会相交的。
142.环形链表II
逻辑:两指针相交的地方并不是环的起点,需要重新计算。
头部到环起点的距离为a, 环的长度为b;
Fast和slow在环上相遇的时候,fast比slow多走了n个环的路程,记作nb;
因为fast的路程是slow的两倍,所以slow的路程就是nb; (fast-slow=nb)
这个nb我的理解就是:slow当前在环上的位置距离环起点的长度+a==b的倍数
要想在环起点的位置上,slow走的路程应该是a+nb,也就是说,slow再走a距离就能到达环起点,这时候让fast去head,然后向前走a距离,(fast变成一个计数的),这样两个人一起到达环的起点。