码迷,mamicode.com
首页 > 其他好文 > 详细

链表中间节点位置

时间:2016-04-11 22:39:18      阅读:186      评论:0      收藏:0      [点我收藏+]

标签:

查找链表中间节点位置有多种方式,首先会想到先遍历一遍获知节点个数,然后取一半作计数器控制访问步数。

另一种常会用到的是设置两个指针:fast_p, slow_p,步长分别为2和1,这样根据物理中 路程公式

s = v * t;

fast_p走过的路程是slow_p的两倍,fast_p走到链表尾部时,slow_p一定在中间或中间左边第一个节点。

切记,循环终止条件是(fast == null || fast.next == null) 不需要判断slow的状态。

技术分享

 

 

 

 

 

 

 

 

如上图,序号分表代表第几次循环,同一序号左端的是slow节点,右边的是fast

fast遇到终止条件的时候(fast == null or fast.next == null)

slow正好在n/2处。

运用,如果回文以链表存储时,如问题Palindrome Linked List

需要从slow.next的位置开始比较。

链表中间节点位置

标签:

原文地址:http://www.cnblogs.com/vin-yuan/p/5380177.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!