1. 程式人生 > >快速找到未知長度的單鏈表的中間結點

快速找到未知長度的單鏈表的中間結點

問題描述:快速找到未知長度的單鏈表的中間結點

普通方法:首先遍歷一遍單鏈表,以確定單鏈表的長度L,然後再從頭結點出發,迴圈L/2次,找到單鏈表的中間結點。

高效演算法(快慢指標):設定兩個指標,*search,*mid都指向單鏈表的頭結點。其中*search指標的移動速度是*mid指標移動速度的2倍。當*search移動到連結串列末尾時,*mid剛好在中間結點。(標尺的思想)

//快速得到單鏈表的中間結點
Status GetMidNode(LinkList &L,int &e){
    LinkList search,mid;
    search = L;
    mid 
= L;//初始時候,search和mid都指向連結串列的頭結點 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; }