一定の与えられた Kと単独でリンクされたリスト Lを、あなたは、すべてのリンクが逆になっている 上のk個の要素 、例えばL.を、与えられ ているL 1→2→6→3→4→5、もし K = 3、あなたマスト出力3→2→1→6→5→4。場合 Kは= 4、あなたを出力しなければならない4→3→2→1→5→6。
入力仕様:
各入力ファイルには、1つのテストケースが含まれています。各場合について、最初の行は最初のノードのアドレスを含む、正 N(ノードの総数である≤)、および正 K(サブリストの長さ≤)反転します。ノードのアドレスは、5桁の非負整数であり、NULLは-1で表されます。
次いで、 Nラインは、次のそれぞれの形式におけるノードを記述する。
Address Data Next
ここで、 Address
ノードの位置は、 Data
整数であり、 Next
次のノードの位置です。
出力仕様:
それぞれのケースでは、出力は、結果はリンクリストを命じました。各ノードは、回線を占有し、そして入力と同じ形式で印刷されます。
サンプル入力:
00100 6 4
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
サンプル出力:
00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
グッド天!リストの書き込み1日
#include <iostreamの> する#include <stdio.hの> 使用して 名前空間STD; ストラクトノード { INT numは、 INT次に; // 次のアドレス }リスト[ 100001 ]; // アドレス100,000初めとして ボイドプリント(INT N-) { IF(N - == - 1 ){ COUT << - 1。; リターン; } int型 T = 10000 ; 一方、(T) { COUT << N- / T。 N= N%T。 T = T / 10 。 } } int型のmain() { int型FIR、N、K。 scanf関数(" %D%D%D "、&FIR、&N&K)。 // cinを>>モミ>> N >> K; リスト[ 100000 ] .Next = モミ。 用(INT iは= 0 ; I <N ++ I) { int型 T1、T、T2。// cinを>> T1 >> T >> T2; scanf関数(" %D%D%D "、&T1、&T、&T2)。 リスト[T1]。 リスト[T1] .Next = T2。 } INT P1 =リスト[FIR] .Next、P2 =リスト[FIR] .Next、P3 =モミ、P4 = 100000 。 一方、(1 ) { // COUT << "P4 =" << P4 << "P3 = "<< P3 <<" P2 = "<< P2 <<" P1 =" << P1 << ENDL。 INTフラグ= 1 。 以下のために(INT iが= 1 ; I <Kを、I ++ ) { 場合(P1 =! - 1 ) { P1 = リスト[P1] .Next。 リスト[P2]。次= P3。 P3=P2; P2 = P1。 } 他 { フラグ = 0 。 休憩; } // COUT << "aaP4 =" << P4 << "P3 = "<< P3 <<" P2 = "<< P2 <<" P1 =" << P1 << ENDL。 } であれば(フラグ) { int型、Y = リスト[P4] .Next。 リスト[P4] .Next = P3。 P3 = Y。 // coutの<< "P3 =" << P3 <<てendl; // のための(INT J = 1; J <K。++ J)P3 =リスト[P3] .Next。 リスト[P3] .Next =PL; // 復元 P4 = P3、 P3 = P2; IF(P2 == - 1)BREAK ; // ちょうど終了 PL = リスト[PL] .NEXT; P2 = リスト[P2] .NEXT; // COUT << "P4 =" << << P4 "P3 =" P3 << << "P2 =" P2 << << "PL =" << ENDL << P1の; } そう// 末端テール離脱動作を(有しますデバッグ:マルチステップバック、ああA) { 一方(P3 =!リスト[P4] .NEXT)!!! // { // P1の= P2。 P2 = P3。 P3 = リスト[P3] .Next。 リスト[P2] .Next = P1。 P1 = P2。 } ブレーク; } } // COUT << ENDL。 int型 P = 100000 ; 一方、(1 ) { P = リスト[P] .Next。 印刷(P)。 裁判所未満 << " " <<一覧[P] .Num << " " ; 印刷(リスト[P] .Next)。 coutの << てendl; もし(リスト[P] .Next == - 1)ブレーク。 } 戻り 0 。 }