24.两两交换链表中的节点
题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/
思路:初始时,cur指向虚拟头结点,然后进行如下三步
然后将cur指向第三个节点
小结:
- 两两交换的前提是节点数是偶数,所以要在循环条件中加以约束
- 做题中犯了下面这样的错误:注意在第一步中cur的指向已经发生了变化,所以第三步中1所在的节点指针应该是temp->next->next->next
19.删除链表的倒数第N个节点
题目链接:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/
思路
-
首先想到的是变成删除正数第size-N+1个节点。(注意链表下标也是从0开始)
这里犯了一个错,index写成index=size-n+1; -
看了卡哥的题解,使用快慢指针
小结:双指针法在前面的删除数组中的元素也用到过。
面试题 02.07. 链表相交
题目链接:https://leetcode.cn/problems/intersection-of-two-linked-lists-lcci/
思路:求出两个链表的长度,并求出两个链表长度的差值,然后让curA移动到,和curB 末尾对齐的位置(A是长度较长的链表)
比较curA和curB是否相同,如果不相同,同时向后移动curA和curB,如果遇到curA == curB,则找到交点。
卡壳点:找到最长链表,并赋值长的长度。
142.环形链表II
题目链接:https://leetcode.cn/problems/linked-list-cycle-ii/
思路:定义两个指针,一个指针每次移动两步,一个指针每次移动一步
卡壳点:如何找到环的入口
相遇时: slow指针走过的节点数为: x + y, fast指针走过的节点数:x + y + n (y + z),n为fast指针在环内走了n圈才遇到slow指针, (y+z)为 一圈内节点的个数A。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。