給乙個鍊錶,若其中包含環,請找出該鍊錶的環的入口結點,否則,輸出null。
問題分析:設定兩個指標,pslow初始化為phead,在後,走的慢;pfast初始化為phead->next,在前,走的快,二者一定會在環內相遇;二者相遇之後設定計數器,令指標沿著環走一圈,計算環中元素數量;設定兩個指標p1和p2,令p1先走環中元素數量的位置,然後兩個同時走,二者會在環入口相遇
/*
struct listnode
};*/
class solution
//開始統計環結點數
int countnum=1;
listnode *ptempnode=pfast->next;
if(pfast==pslow&&pfast!=null)
}else
return null;
//再設兩指標,一先一后
listnode *p1=phead,*p2=phead;
for(int i=0;inext;
while(p1!=p2)
return p1;
}};
改進方法:
在 fast 和 slow 同時指向 phead 時,當二者相遇時,直接令 fast 指向 phead,二者同步向前走,相遇時就是環的入口。
/*
struct listnode
};*/
class solution
fast = phead;
while(fast != slow)
return fast;
}};
鍊錶中環的入口結點
乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。class listnode public class solution return p1 return null 分析 假設鍊錶的起始點到環的入口點節點數為k,環的的節點數為x,讓p2的速度是p1的兩倍,p1和p2相遇在環的第y各節點,可以得到如下等...
鍊錶中環的入口結點
題目要求 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點 分析 1 一種比較偷懶的方法就是遍歷鍊錶,並直接利用hashmap來儲存已經遍歷過的結點。一旦發現已經儲存過的結點,那麼該結點就是環的入口結點。2 參考自 我簡單畫了乙個圖 上傳之後一直是橫過來的。不知道為什麼轉不正 設定兩個指標p1和p2,乙...
鍊錶中環的入口結點
題目描述 乙個鍊錶中包含環,請找出該鍊錶的環的入口結點。思路1 設環中結點數是n,環的入口位置是x 距離起點走多少步 用快慢指標p,q,q移動的速度是p的2倍,當兩個指標相遇時p走的步數是y,q走的步數是2y,q比p多走k個環的距離,即 2y y kn,則y kn。p距離環的入口點的距離為y x,此...