【PAT】题目记录

题目链接

1032 Sharing

题意

给定两个链表首地址,以及各个结点,求两个链表的首个公共结点的地址,没有,则返回-1

笔记

  • 用静态链表时注意该怎么写,怎么遍历,按照题意改造结构体,比如这里加了一个flag变量
  • 方法就是遍历第一个链表标记每个结点为true,然后遍历第二个,遇到第一个flag为true的就是我们找的结点
  • 注意scanf的时候%d%c%d是不行的,因为会把空格读入,此时!!记住写成原来的输入格式%d %c %d,也就是加空格,保持一模一样

代码

#include<bits/stdc++.h>
using namespace std;

const int maxn = 1e6+10;
struct Node{
    char data;
    int next;
    bool flag;
}node[maxn];

int main(){
    int pa,pb,n;
    scanf("%d%d%d",&pa,&pb,&n);
    int add, nxt;
    char ch;
    for(int i=0;i<n;i++){
        scanf("%d %c %d",&add, &ch, &nxt);
        node[add].data = ch;
        node[add].next = nxt;
    }
    while(pa != -1){
        node[pa].flag = true;
        pa = node[pa].next;
    }
    while(pb != -1){
        if(node[pb].flag){
            printf("%05d\n",pb);
            return 0;
        }
        pb = node[pb].next;
    }
    printf("-1\n");
}

猜你喜欢

转载自www.cnblogs.com/doragd/p/11262366.html