【算法】2020.10.19迅雷 服务端笔试题解 构建链表

题目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的情况

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值