题目详情:
小王子有一天迷上了排队的游戏,桌子上有标号为 1-101−10 的 1010 个玩具,现在小王子将他们排成一列,可小王子还是太小了,他不确定他到底想把那个玩具摆在哪里,直到最后才能排成一条直线,求玩具的编号。已知他排了 MM 次,每次都是选取标号为 XX 个放到最前面,求每次排完后玩具的编号序列。
要求一:采用单链表解决
输入描述
第一行是一个整数 MM,表示小王子排玩具的次数。
随后 MM 行每行包含一个整数 XX,表示小王子要把编号为 XX 的玩具放在最前面。
输出描述
共 MM 行,第 ii 行输出小王子第 ii 次排完序后玩具的编号序列。
输入输出样例
示例 1
输入
5
3
2
3
4
2
copy
输出
3 1 2 4 5 6 7 8 9 10
2 3 1 4 5 6 7 8 9 10
3 2 1 4 5 6 7 8 9 10
4 3 2 1 5 6 7 8 9 10
2 4 3 1 5 6 7 8 9 10
这道题目比较简单,利用单链表的知识点。题目的大致意思:小王子有十个球,分别标号1-10个数字,先输入一个数字m,代表小王子排了多少次,接着每排一次就会选取x放在最前面,剩下的求顺序不变。可以把每次取出的球(list.addFirst(x)
)放在最前面,然后删除list.remove(x)
,最后使用循环遍历每次改变之后的链表并输出。
代码如下:
import java.util.LinkedList;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
LinkedList<Integer> list = new LinkedList<>();
for(int i=1;i<=10;i++){
list.add(i);
}
int m = sc.nextInt();
int n = m+1;
while(n-->0){
int x = sc.nextInt();
for(int i=0;i<10;i++){
if(list.get(i)==x){
list.remove(i);
break;
}
}
list.addFirst(x);
for(int i=0;i<10;i++){
System.out.print(list.get(i)+" ");
}
System.out.println();}
sc.close();
}
}