题目1:构建链表
第一行输入一个整数n
第二行开始后的n行中每行输入两个节点
输入样例:
4
aa bb
cc dd
bb cc
dd ee
第一行表示:aa->bb样子的两个链表节点
输出样例
aa
bb
cc
dd
ee
思路:
用两个HashMap存节点 一个map1存为<aa,bb>,另一个map2存为<bb,aa>
存完之后,再迭代用containsKey查找map1中key(即例子中的aa)有没有在map2中key值重复,若没有重复,
则说明这个节点没有作为某个节点的后置节点,即该节点为头结点,最后再根据头节点遍历map1即可。
代码如下
package xunlei;
import java.util.HashMap;
import java.util.Scanner;
/**
* @author LZY
* @version 1.0
* @date 2020/10/19 22:31
*/
public class Main {
public static void main(String[] args) {
//存aa bb
HashMap<String,String> map1=new HashMap<>();
//存bb aa,用来对照map1查找头结点
HashMap<String,String> map2=new HashMap<>();
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
sc.nextLine();
String[][] str=new String[n][2];
for (int i = 0; i < n; i++) {
str[i]=sc.nextLine().split(" ");
map1.put(str[i][0],str[i][1]);
map2.put(str[i][1],str[i][0]);
}
int ind=-1;
for (int i = 0; i < n; i++) {
//如果第一个节点没有在map2中出现,则说明这个节点是头结点
if(!map2.containsKey(str[i][0])){
ind=i;
break;
}
}
//头结点
String s=str[ind][0];
//从头结点开始输出结果
while(n>=0){
System.out.println(s);
s=map1.get(s);
n--;
}
}
}
注:题解是考完试整理出来的,没有过考试的oj,为了简洁,没有判断违法输入和n为0的情况