静态链表具体题目处理详解

题目

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

思路

(1)由于地址的范围很小,因此可以直接用静态链表,但是依照题目的要求,在结点的结构体中再定义一个int型变量flag,表示结点是否在第一条链表中出现,是则为1,不是为-1.

(2)由题目给出的第一条链表的首地址出发遍历第一条链表,将经过的所有结点的flag值赋为1.

接下来枚举第二条链表,当出现第一个flag值为1的结点,说明第一条链表中出现过的结果,即为两条链表的第一个共用结点。如果第二条链表枚举完仍然没有发现共用结点,则输出-1.

注意点

(1)使用%05d格式输出地址,可以使不足5位的整数的高位补0;

(2)使用map容易超时

(3)scanf使用%c格式时是可以读入空格的,因此在输入地址、数据、后继结点地址时。格式不能写成%d%c%d,必须在中间加空格。

#include<cstdio>
#include<cstring>
const int maxn=100010;
struct node{
	char data;
	int next;
	bool flag;
}node[maxn];
int main(){
	for(int i=0;i<maxn;i++){
		node[i].flag=false;
	}
	int s1,s2,n;
	scanf("%d%
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

互联网的猫

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值