リストが与えられると、回転のリストは、リスト内の各ノードは、右方向に移動される 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%の長さであってもよいし、上側が進行します。タイトルの意味だから、完全に理解するには非常に良い解決されます。