24. 两两交换链表中的节点

文档讲解:代码随想录

视频讲解:帮你把链表细节学清楚! | LeetCode:24. 两两交换链表中的节点_哔哩哔哩_bilibili

1. 第一想法是不知道这个题如何做,知道有改变指针这个操作。

2. 双指针也太好用了,用双指针整个过程就是一个双指针移动加修改指针的过程,就像织毛衣一样的感觉。这里竟然要保存两个临时指针变量。

3.要保存两个临时指针变量,结合示意图分析实现起来还可以,主要是指针赋值那里想清楚,输入用例一遍过。

4.分析能否用双指针的意识,这个编程题用了半个小时左右。

19.删除链表的倒数第N个节点

文档讲解:代码随想录

视频讲解:链表遍历学清楚! | LeetCode:19.删除链表倒数第N个节点_哔哩哔哩_bilibili

1. 第一想法先计算得到链表的总长度,根据倒数多少个节点计算正向应该遍历多少个节点count,然后正向遍历到了待删除结点的前一个结点执行删除操作。

2.用双指针正好表示了倒数多少个这个概念,先让快指针移动n+1个位置(不是移动n位是因为用了虚拟头节点,然后需要在待删除结点的前一个节点才能执行操作),然后一起移动快慢指针,当快指针到达链表末尾的位置,慢指针在的位置正好是待删除的元素的前一个节点位置,执行删除操作即可。

3.快慢指针开始时指向虚拟头节点,然后可以通过一个示意图来推导一下执行n+1才是对应待删除节点的前一个位置,一起移动快慢指针循环的边界条件时fast指针是否为空,而不是fast.next,可以想一想fast指针应该是在最后一个节点的位置,此时fast指针的下一个节点为null,不能进入循环执行移动操作,正好满足fast指针在最后一个节点位置。

4.一起移动快慢指针循环的边界条件时fast指针是否为空,而不是fast.next,可以想一想fast指针应该是在最后一个节点的位置,此时fast指针的下一个节点为null,不能进入循环执行移动操作,正好满足fast指针在最后一个节点位置。这个题目用了接近一个小时的时间。

面试题 02.07. 链表相交

文档讲解:代码随想录

1.看不懂题

2.再回去读题,大致懂了是需要先找出最短的链表,最极端的就是短的链表头节点就是相交的位置,这种链表相交可以节省计算机的存储空间,找到这两个链表长度的差值dista后,将长链表的cur指针向后移动这个差值(正数)个位置,然后从这里依次遍历长短链表,对应位置指针相同则返回,遍历完都没有找到指针相同的位置则返回null.

3.根据链表长度不同执行了两端差不多的代码,后一段代码拷贝过来时没有将循环的条件改过来,导致用例报错。用了一个小时左右,主要时题干没有读懂。

142.环形链表II 

文档讲解:142. 环形链表 II – 力扣(LeetCode)

视频讲解:把环形链表讲清楚! 如何判断环形链表?如何找到环形链表的入口? LeetCode:142.环形链表II_哔哩哔哩_bilibili

1.不知道咋做

2.真聪明,又是双指针,数学证明有点多。

3.不熟悉这类需要数学推导证明的编程题,完全没有想到用数学方法。

4.数学推导证明完了,用结论写代码实现起来比较简单,这个题先背方法,一刷就先记得这个结论吧,先不追求掌握的很深入,二刷深入研究一下。

本站无任何商业行为
个人在线分享 » 代码随想录算法训练营第四天|24. 两两交换链表中的节点 |19.删除链表的倒数第N个节点 | 面试题 02.07. 链表相交 | 142.环形链表II
E-->