pat A1032:sharing 题解(简单静态链表)

博客给出题目地址,题目要求根据两条链表首地址及结点信息,求首个共用结点地址,无则输出 -1。解题思路是遍历第一条链表做标记,再遍历第二条链表找标记结点。还介绍了静态链表,可用结构体数组表示,最后给出 AC 代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目地址:https://pintia.cn/problem-sets/994805342720868352/problems/994805460652113920

题目解释:

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

解题思路:

遍历第一条链表,对结点都做个标记,再遍历第二条链表,如果遇到的结点已经被标记过了,则输出,都没有则输出-1。

静态链表:

当结点的地址是比较小的数(如5位整数时),不用去建立动态链表,可以建立结构体数组,数组的下标直接表示结点的地址

struct NODE{
    char data;
    int next;
}node[maxn];//结构体的类型名和变量名不要相同

node[22222]=333333;地址为22222的结点的下一个结点的地址为33333

ac代码:

#include <iostream>
#include <cstring>
#define maxn 100005
using namespace std;
struct NODE{
    char data;
    int next;
    bool flag;
}node[maxn];
int main()
{
    int n,a1,a2,i,address,next;
    char data;
    scanf("%d%d%d",&a1,&a2,&n);
    for(i=0;i<n;i++)
    {
        scanf("%d %c %d",&address,&data,&next);
        node[address].data=data;
        node[address].next=next;
        node[address].flag=false;
    }
    for(i=a1;i!=-1;)
    {
        node[i].flag = true;
        i = node[i].next;
    }
    for(i=a2;i!=-1;)
    {
        if(node[i].flag==true) break;
        i=node[i].next;
    }
    if(i!=-1) printf("%05d\n",i);
    else printf("-1\n");
    return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值