算法-链表算法-链表算法
面5笔5找出单链表的中间元素,要求用时最少
思路
1、最简单实现,先遍历一遍链表,取得长度n;再遍历一遍,取n/2的位置的结点
2、要求用时最少,能不能减少为遍历1次?
3、如果有两个指针都从头遍历,一个一次跑一步,一个跑两步。快的跑完了,慢的不就在中间
4、这是一种题型,需要了解这种思路
代码
Node findMiddle(Node head)
{
If(head == null || head.next == null)
{
return head;//偶数返回中间靠前结点
}
Node slow = head;
Node fast = head;
while( fast.next != null && fast.next.next != null )
{
fast = fast.next.next;
slow = slow.next;
}
return slow;
}