一、单链表的存取
1.找出单链表的倒数第K个元素(仅允许遍历一遍链表)
两个指针fast,slow:
fast首先前进到第k个位置;然后两指针共同后移,直到fast到达末尾,slow所指元素即为所求。
2.找出单链表的中间元素(仅允许遍历一遍链表)
两个指针fast,slow:
fast每次后移2次,slow每次后移1次,直到fast到达末尾,slow所指元素即为所求。
都是利用指针追赶方法。
二、单链表与环的问题
![](https://img-my.csdn.net/uploads/201211/23/1353639416_1847.jpg)
1. 判断单链表是否有环(6形状)?
依然使用指针追赶方法:
两个指针fast,slow:从头指针(起点)开始,fast每次后移2次,slow每次后移1次,若相遇则两者存在环;若fast遇到NULL,则退出(不存在环,所以fast会遇到NULL)
2. 如何找到换入口?
由于fast和slow在碰撞点相遇时,slow走过的距离为(a+x),fast走过的距离为(a+2x+y),fast的前进路程是slow的2倍,所以,可以得出y=a;