【面試題】求連結串列的環入口點
阿新 • • 發佈:2018-12-09
環入口點:我們設A是連結串列的起點,B是環的入口點,C是環內快慢指標的相遇點。兩個快慢指標定義為slow和fast.
slow走的路程:A->B->C;
fast走的路程:A->B->C->B->C;
2*(x+y)=x+y+z+y =》 x=z;
即A->B的路程等於C->B的路程;
//環的入口點 void FinLoopEntry(List*head) { List*fast=head; List*slow=head; if(fast==NULL||slow==NULL) { return; } while(fast!=NULL&&slow!=NULL)//先讓快指標走兩步,慢指標走一步,直到第一次相遇 { slow=slow->next; fast=fast->next->next; if(slow==fast) { break; } } slow=head;//第一次相遇後,讓slow指標從連結串列頭開始走 while(slow!=fast) { slow=slow->next; fast=fast->next; } return slow; }