61件の質問:回転一覧

A. 問題の説明

kは非負であることを特徴とする請求リスト、回転のリスト、k個の位置だけ右にノードリストのそれぞれを、所与。

例1:

入力:1-> 2-> 3-> 4-> 5-> NULL、K = 2

出力:4-> 5-> 1-> 2-> 3-> NULL

説明:

5-> 1-> 2-> 3-> 4-> NULL:右ステップ1を回転させます

4-> 5-> 1-> 2-> 3-> NULL:右のステップ2を回転させます

 

例2:

入力:0-> 1-> 2-> NULL、K = 4

出力:2-> 0-> 1 - > NULL

説明:

2 - > 0-> 1 - > NULL:右ステップ1を回転させます

右ステップ2回転:1-> 2-> 0-> NULL

0-> 1 - > 2 - > NULL:右ステップ3を回転させます

右ステップ4回転:2-> 0-> 1 - > NULL

 

II。問題解決のためのアイデア

ステップ1:単一リンクされたリストを見つけるために最後のサイクルは、最初のノードの次のノード、円形のリストを形成する。この時間を指します。

ステップ2:リストを取得するために長さの長さは、我々は、モバイルは、結び目の長さ=%ノードが権利を取得、最初のノードから後方鎖長-kの先頭を見つけるために、実際には、K-1サイクルであることを知ることができます。

ステップ3:循環リストと単一リンクされたリストに、この時間をヌル形成ノードを切断し、次のノードがヘッドノードです。

 

 

III。結果

実行時:1ミリ秒は、Javaの提出のすべてのユーザーの99.90パーセントを破りました。

メモリ消費量:35.8メガバイトには、Javaの提出のすべてのユーザーの82.91パーセントを破りました。

IV。Javaコード

 

クラスソリューション{
     公共 ListNode rotateRight(ListNodeヘッド、int型K){
          場合(ヘッド== NULL || K == 0 
    { 
        戻りヘッド。
                
    } 
     ListNode最初 = ヘッド。     
     ListNode第 = ヘッド。
     一方、
     { 
        
         場合(second.next == NULL 
         { 
             ブレーク
         } 
         第二 = second.next。
     } 
     int型の長さ= 0
     ListNode M= ヘッドと
     一方、(!M = NULL 
     {  ++ 
         M = m.next。
     } 
     
     second.next = 最初; 
     長さ =長さkの%の長さ。
     以下のためにint型 i = 1; iは長さ<; iは++ 
     { 
         最初 = first.next。
     } 
     = 最初; 
     最初 = first.next。
     second.next = nullを返す  最初; 
    
    }
}

 

おすすめ

転載: www.cnblogs.com/xiaobaidashu/p/11656084.html