逆の順序で間隔リスト
の説明
Kは逆必要はないノードの数よりも、最終的に少ない;各単一リンクリストの間の逆のノードKは、新しいリストを印刷する要求時間複雑度はO(N)であり、追加の空間の複雑さはO(1)。
入力
行動の数、スペースで区切られた各テスト入力の各行の値は、第一鎖の長さを表し、中間ノード値、最後K.の代表と、第1の実施形態の入力
出力
新しいリストの各出力の動作は、ノード値はスペースではなく、宇宙の終わりで区切られています。
サンプル入力1
2
8 1 2 3 4 5 6 7 8 3
8 a b c d e f g h 4
サンプル出力1
3 2 1 6 5 4 7 8
d c b a h g f e
import java.io.EOFException;
import java.util.*;
public class Main {
private static int T;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
T = in.nextInt();
in.nextLine();
while (T-- != 0) {
String s = in.nextLine();
String[] dataStr = s.split(" ");
int n = Integer.valueOf(dataStr[0]);
if (n == 0){
print();
continue;
}
int spaceCnt = n-1;
String[] strings = new String[n];
for (int i = 0; i < n; i++) {
strings[i] = dataStr[i+1];
}
int k = Integer.parseInt(dataStr[dataStr.length-1]);
if (k == 0){
for (int i = 0; i < n; i++) {
System.out.print(strings[i]);
if (spaceCnt-- != 0){
System.out.print(" ");
}
}
print();
continue ;
}
if (k > n){
for (int i = 0; i < n; i++) {
System.out.print(strings[i]);
if (spaceCnt-- != 0){
System.out.print(" ");
}
}
print();
continue ;
}
int point = -1;
while (point + k < n){
for (int i = 0; i < k; i++) {
System.out.print(strings[point + k - i]);
if (spaceCnt-- != 0){
System.out.print(" ");
}
}
point += k;
}
if (point < n){
for (int i = point + 1; i < n; i++) {
System.out.print(strings[i]);
if (spaceCnt-- != 0){
System.out.print(" ");
}
}
}
print();
}
}
private static void print(){
if (T == 0){
System.out.println();
}else{
System.out.println();
}
}
}