魏名华

不要偷懒,做更好的自己

Nothing


No Welcome Message

数据结构与算法之美-07 | 链表(下):如何轻松写出正确的链表代码?

我精选了 5 个常见的链表操作。你只要把这几个操作都能写熟练,不熟就多写几遍,我保证你之后再也不会害怕写链表代码。 

单链表反转 
链表中环的检测 
两个有序的链表合并 
删除链表倒数第 n 个结点 
求链表的中间结点

有空写写看,写完再进入下一步。

zeta 置顶
建议大家在实现之前的思考时间不要太长。一是先用自己能想到的暴力方法实现试试。另外就是在一定时间内(比如半个到一个小时)实在想不到就要在网上搜搜答案。有的算法,比如链表中环的检测,的最优解法还是挺巧妙的,一般来说不是生想就能想到的

👍 144 2018-10-06
作者回复: 👍,高手!实际上,写链表代码还是主要为了锻炼写代码的能力,倒不是思考解决办法。像环的检测这种解决办法我也想不出来,都是看了答案之后恍然大悟。

自己没有试,指针非常的头大。但是看了答案,也不简单,记录一下:

1、单链表反转

1->2->3->4 to 1<-2<-3<-4

直接看了答案了,虽然不好理解,还是比较简单,只有1种解法吧

2、链表中环的检测

1->2->3->4 后面是 4->2

直接看了答案了,算法很惊奇,快慢指针,想不到可以这样,我想到的是用数组记录遍历过的节点然后比较

3、两个有序的链表合并

比较简单,代码确实难看,写起来也不容易吧,cry

4、删除链表倒数第 n 个结点

也是快慢指针,快的速度不一样。这个其实分析一下,应该可以得到解法。确实应该先暴力破解,想思路,再通过思路想细节。

5、求链表的中间结点

也是快慢指针。

几乎都是快慢指针。也不知道这是谁想出来的快慢指针,很强大的解法思路。