import java.util.*;
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
String[] numStrArr = in.nextLine().split(" ");
int l = numStrArr.length;
int headValue = Integer.parseInt(numStrArr[1]);
LineNode header = new LineNode();
header.v = headValue;
// 可以快速找到目标节点
Map<Integer, LineNode> v2NodeMap = new HashMap<>();
v2NodeMap.put(header.v, header);
int k = Integer.parseInt(numStrArr[l - 1]);
List<Integer> nodes = new ArrayList<>();
for (int i = 2; i < numStrArr.length - 1; i += 2) {
int a = Integer.parseInt(numStrArr[i]);
int b = Integer.parseInt(numStrArr[i + 1]);
// (b -> a)
LineNode node = v2NodeMap.get(b);
LineNode aNode = new LineNode(a);
// 插入
aNode.next = node.next;
node.next = aNode;
v2NodeMap.put(a, aNode);
}
LineNode p = header;
while (p != null) {
if (p.v != k) {
nodes.add(p.v);
}
p = p.next;
}
String[] ret = new String[nodes.size()];
for (int i = 0; i < ret.length; i++) {
ret[i] = nodes.get(i).toString();
}
System.out.println(String.join(" ", ret));
}
public static class LineNode {
int v;
LineNode next;
public LineNode() {
}
public LineNode(int v) {
this.v = v;
}
}
一般的单链表操作,几乎没有难度,也没有算法的影子;
本题解的特点:
- 一次io;
- 快速找到待插入节点;
- 注释清晰,代码可读性强;

京公网安备 11010502036488号