PAT1 1032 Sharing

题目链接
我的github

题目大意

有两个链表,这两个链表可能会有一些公共节点,求第一个公告节点的地址

输入

每组包含一个测试用例,每个用例的第一行是两个链表的地址和节点总数 N N N( ≤ 1 0 5 \leq 10^5 105),之后会有 N N N行,每行表示一个节点的信息地址 数据 下个节点的地址,-1表示null

输出

对每个例子输出第一个公共节点,如果没有公共节点,输出-1

样例输入

11111 22222 9
67890 i 00002
00010 a 12345
00003 g -1
12345 D 67890
00002 n 00003
22222 B 23456
11111 L 00001
23456 e 67890
00001 o 00010

00001 00002 4
00001 a 10001
10001 s -1
00002 a 10002
10002 t -1

样例输出

67890

-1

解析

先将节点存在dict里面,再遍历第一条链表并将节点放入一个list,之后遍历第二条链表,直到有节点已经在list里面。但是这题用python会在最后一个测试点超时。。。

# -*- coding: utf-8 -*-
# @Time : 2019/5/28 18:54
# @Author : ValarMorghulis
# @File : 1032.py


def solve():
    s, e, n = input().split()
    n = eval(n)
    tmp = dict()
    for i in range(n):
        address, data, nex = input().split()
        tmp[address] = nex
    posa, posb = s, e
    ans = list()
    while posa != '-1':
        ans.append(posa)
        posa = tmp[posa]
    while (posb not in ans) and posb != '-1':
        posb = tmp[posb]
    print(posb)


if __name__ == "__main__":
    solve()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值