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。从头结点出发一个指针,从相遇节点 也出发一个指针,这两个指针每次只走一个节点, 那么当这两个指针相遇的时候就是 环形入口的节点。

本文介绍了LeetCode中涉及链表操作的四道题目,包括两两交换链表中的节点、删除链表的倒数第N个节点、链表相交以及环形链表II的问题。重点讨论了双指针法在解决这些问题中的应用,如在寻找链表交点和确定环形链表入口时的角色。
1284

被折叠的 条评论
为什么被折叠?



