终于进入链表的中级操作了!!!!

题目:Leetcode 24

链接:两两交换链表中的节点:https://leetcode.cn/problems/swap-nodes-in-pairs/

解题思路:首先一般的链表题,为了防止头节点head丢失或者删除,都需要使用虚拟头节点的用法。本题还是需要多指针的解题思路,首先需要明确的是:如果想要两两交换链表中的节点,那么一定要位于被交换的两个节点之前的一个节点。其次还需要清楚一旦节点进行了两两交换,那么后面的路径便不可知,所以一定要用临时指针提前保存后面移动的路径!

题目:Leetcode 19

链接:删除链表的倒数第N个节点:https://leetcode.cn/problems/remove-nth-node-from-end-of-list/

解题思路:注意使用虚拟头节点。当需要删除倒数第n个节点,让我们联想到了双指针法-快慢指针。先让快指针移动n个节点,之后快慢指针同时移动,当快指针到底时,慢指针则移动到了倒数第n个节点的位置,但是如果想要删除倒数第n个节点间,慢指针必须位于倒数第n+1个节点。故快指针先移动n+1个节点;

题目:Leetcode 160

链接:链表相交:https://leetcode.cn/problems/intersection-of-two-linked-lists/

解题思路:本题一定要明确的是,链表是否相交是代表两个指针指向的节点地址是否一样,并不是单一比较节点的值是否一样。简单来说,节点值相同,节点地址不一定相同,链表不一定相交。节点地址一样,则节点值也一定相同,链表一定相交。由于相交时都是执行的尾对其,故使用双指针,分别移动使两个链表尾对齐再开始进行数值比较,进而得出是否存在相交

题目:Leetcode 142

链接:环形链表||:https://leetcode.cn/problems/linked-list-cycle-ii/

解题思路:

环形链表两个重要问题

1:如何判断有环?使用双指针法,快指针:一次两个节点,慢指针:一次一个节点。两者速度差为1,如果有环,那么快慢指针一定相遇

2:如何判断环的入口?记录快慢指针相遇的位置,此时慢指针与位于头节点的指针一起运动,其相遇点即为环的入口