最後から二番目のノードでの14 K鎖FindKthToTail

入力されたリンクリスト、リンクリスト出力の逆数k番目のノード。

コアアイデア2つのポインタが、ポインタが最初のノード、第一の補正第1及び第2のポインタのポイントをできるようにした後、(K-1)ステップ手放す、k番目のノードに到達します。

最初のものは、エンド・ノード、位置は最後から二番目のノードkである第2のノードに到達したときに、2つのポインタは、同時に後退します

 

O(N)の時間計算量、トラバースことができ

 

1  / * 
2つの パブリッククラスListNode {
 3      int型のval;
4      ListNode次= NULL;
5  
6      ListNode(int型のval){
 7          this.val =ヴァル。
8      }
 9  } * / 
10  インポート java.utilの*。;
11  パブリック クラスソリューション{
 12      パブリック 静的 ListNode FindKthToTail(ListNodeヘッド、int型K){
 13          // 特殊情况判定
14          であれば(ヘッド== NULL戻り ヌル15          IF(K <= 0)     戻り NULL ;
 16          // 二つのポインタを作成する
17。          ListNodeのfastptr = ヘッド、
 18は          ListNode slowptr = ヘッド;
 19          // 高速ポインタがノードにK-1を実行した(最初のデフォルトノード1はありません0)
20である         ためINT I = 1; Iは、Kを<; I ++は){
 21は、             IF(fastptr.next!= NULL ){
 22は                  fastptr = fastptr.next;
 23である             }
 24              他の    戻り NULL ; // へ考慮して鎖長がK未満である
25          }
26は         、一方(!fastptr.next = ヌル){
 27              fastptr = fastptr.next;
 28              slowptr = slowptr.next;
 29          }
 30          リターンslowptr;
 31である     }
 32      公共 静的 ボイドメイン(文字列[]引数){
 33である          スキャナSC = 新しい新スキャナ(System.in);
 34で          のSystem.out.println( "最後から二番目のノードの番号を入力してください" );
 35          INT K = sc.nextInt();
 36          のSystem.out.println( "順次リンクされたリストを入力してください" )。
 37         ヘッド= ListNode NULL ;
 38である         IF(sc.hasNext())=ヘッド新しい新しいListNode(sc.nextIntを());
 39          ListNodeのTEMP = ヘッド;
 40          ながら(sc.hasNext()){
 41は              = TEMP 新しい新しいListNode(SC。 nextInt());
 42である              TEMP = temp.next;
 43である         }
 44れる          temp.next = NULL ;
 45          ListNode結果= FindKthToTail(頭部、k)は、
 46である          のSystem.out.println( "リンクされたリストのK最後から二番目のノードです" + 結果);
 47      }
 48 }

 

バグの試運転

bug1:Kが負と見なされていないか、Kは何ら考慮ヘッドが空でない、0であり、添加ライン13及び14

bug2:Kは、リストの長さよりはるかに大きい場合に考慮していない、リストを選択することができ、長さKの比較関数を記述するために必要なこの時間の長さ、より激しいです

    それともこの状況を解決するために使用され、fastptr.next fastptrあり、ここに注意を払っていないことができます

17は(INT i = 1; iはK <; iは++){
18 IF(fastptr.next!= NULL){
19 fastptr = fastptr.next。
20}
21そうでない場合はnull;

bug3:牛は最終顧客のネットワークの状態を入力しませんが、入力リストを終了するかを決定でIDEAは、問題となっています

参照ピクチャから:https://yinziang.github.io/yinziang/2018/03/05/Algo-OJ-Others-3/

主な機能は、IDEAに変更する必要があります。


    


  

おすすめ

転載: www.cnblogs.com/shareidea94/p/10849786.html