在单链表中如何用最快的方法找到中间元素???
正常你是不是想着先把单链表遍历一遍得到他的长度,再重新遍历1/2长度便可得到中间元素。。。我很菜,我也这么想的,但是!!!
算一下该方法的时间复杂度:n+1/2*n=2/3*n,是不是有点麻烦
下面讲一下最近学到很厉害的方法:快慢指针,,直接上代码:
Status GetMidNode(LinkList L,ElemType *e)
{
LinkList search, mid;
mid = search = L;
while(search->next !=NULL)
{
if(search->next->next !=NULL)
{
search = search->next->next;
mid = mid->next;
}
else
{
search = search->next;
}
}
*e=mid->data;
return OK;
}