获取链表的中间节点,这个题有两种解法。
方法一:先遍历一遍链表,求出链表的长度length,然后使用length/2获取链表的中间节点。
但是这个方法有一个弊端,我们需要遍历两遍链表。
方法二:快慢指针法,定义一个fast和一个slow。让fast的速度是slow速度的两倍,当fast到链表的最后一个节点位置时,slow就处于中间节点,这个时候,输出slow。
快慢指针法的图解:
快慢指针法的代码如下:
public Node middleNode(){
//当fast的速度是slow速度的两倍时,当fast走到最后一个节点时,slow出于中间位置。
Node fast=head;
Node slow=head;
while(fast!=null&&fast.next!=null){
fast=fast.next.next;
slow=slow.next;
}
return slow;
}