代码随想录Day05|两两交换链表中的节点 | 删除链表的倒数第N个节点| 链表相交 |环形链表II
两两交换链表中的节点
解题思路
由于是两两交换,解题的关键是临时的变量去存储next的指针,这也是昨天题目中所提到的方法。同时也用到了虚拟头节点,非常的方便。难点是在于如何判断交换结束,需要考虑next是否为空,如果后面没有凑够两个能交换的节点也需要停止。
知识点
虚拟头节点,指针,临时变量
心得
昨天学到的知识今天能用上就非常好,及时巩固,不看解析一次过.
【二刷】注意设置一个临时头节点,每一次交换后临时头节点的next需要绑定到交换完的第一个元素,每进行一次交换,临时头结点都会变成上一次交换完后的第二个结点
删除链表的倒数第N个节点
解题思路
这题目还是用双指针,因为要得到倒数第n个节点,所以双指针间的距离就是等于n,然后双指针同时移动,当移动到尾部的时候停下就能得到我们要的节点。
知识点
双指针,
心得
运用双指针,轻松解除,移除的时候遇到了一些问题但不要紧。
【二刷】使用虚拟头结点能更方便的返回头指针和移除结点
链表相交
解题思路
创建两个指针指向两个链表的相同起始下标,然后同时移动,当指针地址相同就是相交的结点
知识点
指针,双指针
心得
一开始想到用比较指针的方法,但是不知道如何找到交点,后来看了题解就豁然开朗,需要记下这种解法。
环形链表II
解题思路
用快慢指针来判断是否循环,快指针一次移动两个,慢指针一次移动一个。难的地方是如何判断交点,代码随想录详细的解释了解题过程。
知识点
指针,双指针
心得
一开始想到用快慢指针来判断是否循环,但是不知道如何找到交点,后来看了题解就豁然开朗,看来数学这方面也很重要。
【二刷】先通过快慢指针判断是否有环,然后慢指针重新设置为头结点,快指针依旧保持在和慢指针相交的结点,每次移动一个节点,最后快慢指针重合的那个点就是环入口