zoukankan      html  css  js  c++  java
  • 1032 Sharing (25分)

    题意

    给出两条链表的首地址以及若干结点的地址、数据、下一个结点的地址,求两条链表的首个共用结点的地址。如果两条链表没有共用结点,则输出-1。

    思路

    1. 由于地址的范围很小,因此可以直接用静态链表,但是依照题目的要求,在结点的结构体中再定义一个bool型变量visited,表示结点是否在第一条链表中出现,是则为true。
    2. 由题目给出的第一条链表的首地址出发遍历第一条链表, 将经过的所有结点的visited值赋为true。
    3. 接下来枚举第二条链表,当出现第一个visited值为true的结点,说明是第一条链表中出现过的结果,即为两条链表的第一个共用结点。
    4. 如果第二条链表枚举完仍然没有发现共用结点,则输出-1。

    注意点

    1. 使用%05d格式输出地址,可以使不足5位的整数的高位补0。
    2. scanf使用%c格式时是可以读入空格的,因此在输入地址、数据及后继结点地址时,格式不能写成%d%c%d,必须在中间加空格。
    const int N=1e5+10;
    struct Node {
        char data;
        int nxt;
        bool visited;
    }a[N];
    int head1,head2;
    int n;
    
    int main()
    {
        cin>>head1>>head2;
        cin>>n;
    
        for(int i=0;i<n;i++)
        {
            int addr,nxt;
            char data;
            cin>>addr>>data>>nxt;
            a[addr]={data,nxt};
        }
    
        int p1 = head1;
        while(p1 != -1)
        {
            a[p1].visited = true;
            p1 = a[p1].nxt;
        }
    
        int p2 = head2;
        int ans=-1;
        while(p2 != -1)
        {
            if(a[p2].visited)
            {
                ans = p2;
                break;
            }
            p2 = a[p2].nxt;
        }
    
        if(~ans) printf("%05d
    ",ans);
        else puts("-1");
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    Nginx负载均衡
    MySQL主从复制
    笔记
    tomcat工作原理
    Nginx工作原理
    Loj#6183. 看无可看
    [BZOJ 2759] 一个动态树好题
    5255 -- 【FJOI2016】神秘数
    [NOI2015]寿司晚宴
    [CQOI2017]老C的键盘
  • 原文地址:https://www.cnblogs.com/fxh0707/p/14353049.html
Copyright © 2011-2022 走看看