LeetCode 61--回転リスト(JAVA)

リストが与えられると、回転のリストは、リスト内の各ノードは、右方向に移動される  k個の 前記位置を  kは 非負です。

例1:

入力:1-> 2-> 3-> 4- > 5-> NULL、K = 2 
出力:4-> 5-> 1-> 2- > 3-> NULLは
説明:
回転を右ステップ1:5- > 1-> 2-> 3-> 4- > NULLが
時計回り2つのステップ回転:4-> 5-> 1-> 2- > 3-> NULL

例2:

入力:0-> 1-> 2-> NULL 、K = 4 
出力:2->0->1->NULL
説明:
右のステップ1の回転:2-> 0-> 1-> NULL 
右に2つのステップを回転させます:1-> 2-> 0- > NULL 
右回転ステップ3:  0->1->2->NULL
右のステップ4を回転させます。 2->0->1->NULL

直接コードに:

/ ** 
 *単一リンクリストのための定義。
 *パブリッククラスListNode { 
 * int型のval; 
 * ListNode次。
 * ListNode(INT X){ヴァル= X。} 
 *} 
 * / 
クラスソリューション
{ 
    公共 ListNode rotateRight(ListNodeヘッド、int型K)
    { 
        もし(K == 0 リターンヘッド。
        もし(ヘッド== nullのリターン・ヘッド;
        int型の長さ= 1 
        ListNodeのCUR = ヘッド。
        しばらく(cur.next!= nullを
        { 
            CUR = cur.next;  ++ ; 
        } 
        cur.next =ヘッド; //は既にの端鎖と末端接続した
        整数 M = Kの%-length長; // これは、アルゴリズムの鍵であり、我々が見つける必要ここで、切断
        INT I = 0; I <M、Iが++ 
        { 
            CUR = cur.next; 
        } 
        ListNode newhead = cur.next; // 新しいヘッドノードリスト取得 
        cur.next = ヌル ; // オフ開鎖ループ
        戻りnewhead; 
    } 
}

アルゴリズムのアイデア:長さ、数学的研究その実際見出さK <kがあれば、鎖長が、実際には、k個のノード全体ムーブリストのリストのフロントエンドとして理解することができる>あれば実際には、これは、数学の問題として解釈することができますそれはK = K%の長さであってもよいし、上側が進行します。タイトルの意味だから、完全に理解するには非常に良い解決されます。

 

おすすめ

転載: www.cnblogs.com/jiameng991010/p/11295498.html