快速找到未知长度单链表中的中间结点
1.普通方法
首先需要遍历一下链表,然后得知链表长度,然后在重新查找中间长度的结点,然后进行输出结点值。算法复杂度为O(n)+O(1/2n)。这里就不进行普通代码演示了。
2.加分方法
运用快慢指针的方法,*fast指针每次走两个结点,slow指针每次走一个结点。当fast指针走到尾部时,*slow指针刚好在单链表中的中间结点。这样算法复杂度就只有O(1/2n)了,效率提高了三倍。代码如下:
status GetMidNode(LinkList L,ElemType *e)
{
L.inkList fast,slow;
slow = fast = L;
while (fast->next != NUIL)
{
if(fast->next->next !=NULL)
{
fast= fast->next->next;
slow = slow->next;
}
else
{
fast = fast->next;
}
}
*e = mid->data;
return Ok;
}