トピック:シクロアルキル環は、入口ノードを見つけた場合、単独でリンクされたリストの環が存在するかどうかを決定します。
分析:
- 最初の問題:使用ポインタの速度(2倍の速ポインタを移動、遅いポインタが一度さらに一歩進み、NULLに到達するかどうかを判断するには、速い==遅い設立場合は、リストにはリングを持っています)。
- 第二の問題:速い遅いとの出会いは、遅くも革命(矛盾証明可能)が完了していない必要があります。
模式図
AB |が|入口から変化開始点を示し、A2 = | CB |が距離リングへのエントリポイントのミーティングポイントを表し、S1 = | AB出発点は、Bは、次いで、A1 =環状入口点、C点が満たされています| + | BC |リングの長さを表し| BCB |ポインタの長さを遅く表し、s2は、高速の長さ、C =を行くためのポインタを表し
時間が二倍の長さによって満たされているので、2倍遅いため、高速に
S2 = 2×S1 = A1 + N * C +(S1-A1)(1)
N(1)得られた溶解し、リングに巻き速い歩行の数を表し:
S1 = N * C(2)、
A1とA2との間の関係を見出すことです:
A2 = C-(S1-A1)(3)
(2)〜(3)を得へ:
A1 = A2 +(N-1)* C(4)
始点A、ポインタからN METからのIFポインタmよう最終的に開始ポインタm後の点Cと点Bで出会う、Nバイパス(N-1)リング
問題解決:
1つの 構造体ノード{ 2 INT V。 3 ノード* 次の; 4 }。 5ノード* IsCycle(ノード* ヘッド){ 6 ノード*高速=頭部、*遅い= ヘッド。 7 8 ながら(真){ 9 であれば(速い!= NULL) 10 高速=急速> 次。 11 もし(速い!= NULL) 12 ファスト=急速> 次。 13 他に 14 のリターンNULL; 15 もし(!=遅いNULL) 16 遅い=スロー>を次の; 17 他に 18 のリターンNULL; 19 20 であれば(速い== 遅い) 21 リターン速いです。 22 } 23 } 24ノード* FindEntry(ノード*ヘッド、ノード* ジョイント){ 25 ノード×m個=頭部、* N = ジョイント。 26 一方(真){ 27 かの(M個の==のN) 28 リターンM。 29 、M = M-> 次。 30 N = N> 次。 31 } 32 } 33 INT メイン(){ 34 ノード* B1 = 新しいノード()。B1-> V = 1 ; 35 ノード* B2 = 新しいノード()。B2-> V = 2 ; B1->次= B2。 36 ノード* B3 = 新しいノード()。b3-> V = 3 ; B2->次= B3。 37 ノード* B4 = 新しいノード()。b4-> V = 4 ; b3->次に= B4。 38 ノード* B5 = 新しいノード()。b5-> V = 5; b4->次= B5。 39 ノード* B6 = 新しいノード(); b6-> V = 6 ; b5->次= B6。 40 ノード* B7 = 新しいノード(); B7-> V = 7 ; b6->次に= B7。 41 ノード* B8 = 新しいノード(); b8-> V = 8 ; B7->次= B8。b8->次= B3。 42 43 ノード*の温度; 44 であれば((TEMP = IsCycle(B1))!= NULL){ 45 のprintfは(" \ nの関節点がある:%のD "、temp-> V)。 46 のprintf(" サイクルの\のNtheのエントリがあります。%D "、FindEntry(B1、TEMP) - > V)。 47 } 48 、他の 49 のprintf(" \のnthereが何サイクルではありません。" ); 50 リターン 0 ; 51 }
トピック: 2つのデュアルツリー同じ(左と右サブツリー比較を横切ることができない)かどうかを決定します。
分析:再帰的実装、ツリー内のKレベル、2 ^ Kのノードが存在し、それがあろう(2 ^ K)* 2回の呼び出しは、時間の複雑さはO(N)です。
問題解決:
1つの 構造体ノード{ 2 のint 値。 3 ノード* 左; 4 ノード* 右; 5 }。 6 7 ブール CompareTree(ノード*まず、ノード* 秒){ 8 であれば(最初== NULL &&第== NULL) 9 リターン 真。 10 であれば(!(第== NULL &&秒= NULL)|| 11 !(第一= NULL &&第== NULL)) 12 リターン 偽。 13 もし(初段>値!= 2番目に> 値) 14 リターン はfalse ; 15 リターン CompareTree(初段>左、2次>左)&& 16 CompareTree(初段>右、2次> 右)。 17 }
ます。https://www.cnblogs.com/leo-chen-2014/p/3747122.htmlで再現