リストを指定すると、リストがリングかどうかが決定されます。(余分なスペースを使用しないでください)
例:ABCB
アイデア:
1.メソッドポインタ速度
2本のセット手、高速の手を各テイク2つの段階遅いポインタ各時間ステップ、それはリングである場合、ポインタはすぐに追い越し遅くなり、ポインタのポインタが、それはtrueを返します高速と低速のポインタに等しくなるまで。それ以外の場合はfalseを返します
VAR hasCycle = 関数(ヘッド){
// 1は不在分析
IF(!ヘッド|| {head.next)を
リターン 偽へ
}
// 2. 二重ポインタループ
VAR FAST = head.nextの
VAR SLOW = ヘッド
// 2.1 高速ポインタ各テイク二つのステップポインタが速い値であった場合、2つが等しくなるまで、遅いポインタにより各ステップは、それが終了し、リングであることが判明
しながら(高速&& fast.nextを){
IF(FAST == 遅いです){
リターン 真へ
}
FAST = fast.next.next
SLOW =slow.next
}
//2.2 それ以外の場合は、環状ではない
リターン falseに
};
2.私は知らないどのような方法
VAR hasCycle = 機能(ヘッド){
しばらく(ヘッド=!ヌル){
場合(ヘッド== head.nextは){
返す 真。
}
であれば(head.next!= NULL ){
head.next = head.next.next。
}
ヘッド = head.next。
}
を返す 偽。
}。
このアプローチは、リストを破棄し、推奨されません