我精选了 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、求链表的中间结点
也是快慢指针。
几乎都是快慢指针。也不知道这是谁想出来的快慢指针,很强大的解法思路。