Given a constant K and a singly linked list L, you are supposed to reverse the links of every K elements on L. For example, given L being 1→2→3→4→5→6, if K=3, then you must output 3→2→1→6→5→4; if K=4, you must output 4→3→2→1→5→6.
Input Specification:
Each input file contains one test case. For each case, the first line contains the address of the first node, a positive N (≤105) which is the total number of nodes, and a positive K (≤N) which is the length of the sublist to be reversed. The address of a node is a 5-digit nonnegative integer, and NULL is represented by -1.
Then N lines follow, each describes a node in the format:
Address Data Next
where
Address
is the position of the node,Data
is an integer, andNext
is the position of the next node.Output Specification:
For each case, output the resulting ordered linked list. Each node occupies a line, and is printed in the same format as in the input.
Sample Input:
00100 6 4 00000 4 99999 00100 1 12309 68237 6 -1 33218 3 00000 99999 5 68237 12309 2 33218
Sample Output:
00000 4 33218 33218 3 12309 12309 2 00100 00100 1 99999 99999 5 68237 68237 6 -1
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
java
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String startPoint = sc.next();
int pointNum = sc.nextInt();
int k = sc.nextInt();
ArrayList<list> list = new ArrayList<>();
for (int i = 0; i < pointNum; i++) {
list.add(new list(sc.next(),sc.nextInt(),sc.next()));
}
list.sort(new Comparator<Main.list>() {
@Override
public int compare(Main.list o1, Main.list o2) {
return o1.getData() - o2.getData();
}
});
if (pointNum % k == 0 && k != 1) {
Collections.reverse(list.subList(0,k));
Collections.reverse(list.subList(k,pointNum));
for (int i = 1; i < list.size(); i++) {
list.get(i - 1).setNextAddress(list.get(i).getAddress());
}
list.get(pointNum - 1).setNextAddress("-1");
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
} else {
Collections.reverse(list.subList(0,k));
for (int i = 1; i < list.size(); i++) {
list.get(i - 1).setNextAddress(list.get(i).getAddress());
}
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i).toString());
}
}
}
static class list {
String address;
int data;
String nextAddress;
public list(String address, int data, String nextAddress) {
this.address = address;
this.data = data;
this.nextAddress = nextAddress;
}
public String getAddress() {
return address;
}
public int getData() {
return data;
}
public String getNextAddress() {
return nextAddress;
}
public void setAddress(String address) {
this.address = address;
}
public void setData(int data) {
this.data = data;
}
public void setNextAddress(String nextAddress) {
this.nextAddress = nextAddress;
}
@Override
public String toString() {
return
address + ' ' + data + ' ' + nextAddress;
}
}
}
求助怎么解决这两个问题 ,感谢!!!