思路
http://wuchong.me/blog/2014/03/25/interview-link-questions/
4. 求链表的中间节点
题目描述:求链表的中间节点,如果链表的长度为偶数,返回中间两个节点的任意一个,若为奇数,则返回中间节点。
分析:此题的解决思路和第3题「求链表的倒数第 k 个节点」很相似。可以先求链表的长度,然后计算出中间节点所在链表顺序的位置。但是如果要求只能扫描一遍链表,如何解决呢?最高效的解法和第3题一样,通过两个指针来完成。用两个指针从链表头节点开始,一个指针每次向后移动两步,一个每次移动一步,直到快指针移到到尾节点,那么慢指针即是所求。
这么理解:slow节点:走了X个节点---L/2; fast节点:走了2x个几点-----L长度。共X步。
引申:如何找出链表的前第1/3个链表长度的节点。就是:slow: x步---L/3节点。fast: L节点。所以,fast每次走三步。
代码如下:
|
|