LeetCode 61回転チェーン

リンクします。https://leetcode-cn.com/problems/rotate-list

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

 

 

実際には、この質問は、k個のノードに前方に後方であるが、鎖長がそうモジュロkがn未満でなければならない保証するために、kの値nよりも大きいことが可能です。最初、順方向ポインタKステップを失望させ、同時に第一のポインタと第2のポインタが最初にまで行きましょう、第1のノードと最後から二番目のノードK + 1の逆数、及び前のように方法には2つのポインタのポイントを必要とします最後から二番目のノードへのポインタ、ときに、第2のポインタは最後から二番目のノード+ 1 kに。

これらのk個のノードの移動を開始、これらのk個のノードは、全体として最初のノードへの最初の元のヘッドポインタを移動させるようにし、次のノード第2のポインタをヘッドノードを作成し、及びに第2のポインタを聞かせ空。順序は、それ以外の場合はエラーになり、右でなければなりません。

この質問のヘッドノードが変更されましたが、ファイルは削除されませんので、仮想ノードを設定しませんが。

次のようにC ++のコードは次のとおりです。

1  クラスソリューション{
 2  公共3      ListNode * rotateRight(ListNode *ヘッド、int型K){
 4          もし(!ヘッド)戻りNULL。
5          INT N = 0 6          (; P P = P->オートP =ヘッド{次)
 7              N ++ 8          }
 9          K%= N。
10          自動最初=ヘッド、第二= ヘッド。
11          一方(k-- ){
 12              第=最初- > 次。
13          }
 14          ながら(初段> 次){
 15              第=初段> 次。
16              = 2次>第二次。
17          }
 18          初段>次= ヘッド。
19          ヘッド= 2次> 次。
20          2次>次= NULL;
21          リターンヘッド;
22      }
 23 }。

 

おすすめ

転載: www.cnblogs.com/hellosnow/p/11562298.html