链表-pat1032

链表

一般如果数据量不太大的情况下,我们可以使用指针作为链表的实现,如果数据量太大的,我们可以使用静态数组的方式来实现链表结构。有没有发现这个和树的建立是类似的

做pat的时候,我们还是尽量使用静态链表来建立,这样的话,可以减少处理的时间——来源于yxc

不多bb,直接上题

链表入门

本人狗分做法

#include<iostream>
#include<cstdio>

using namespace std;
int l[100001]={0};
int main()
{
	cin.tie(0);
	//狗分操作,可以拿下10多分,具体思路,反向遍历,如果有两个尾结点的话,没有suffix;如果只有一个尾结点,我们找到第一个分叉即可。可以得到11分
	int st1,st2,n;
	
	int flag=1;
	int end=0;
	int count=0;
	int ans;
	scanf("%d %d %d",&st1,&st2,&n);
	for(int i=0;i<n;i++)
	{
		char c;
		int x,y;
		cin>>x>>c>>y;
		if(y==-1)
		{
			count++;
		}
		if(l[y]==0)
		{
			l[y]=x;
		}
		else if(l[y]!=0)
		{
			if(!end)
			ans=y;
		}
	}
	if(count==1)
	cout<<ans;
	else
	cout<<"-1";
	return 0;
}

狗分的漏洞,我个人感觉在于可能是一个链表是另一个链表的子集。

参考别人的题解

#include<iostream>
#include<cstdio>

using namespace std;
const int N=99999;
struct node{
	bool flag;
	int next;
}num[N];
int main()
{
	cin.tie(0);
	int s1,s2,n;
	int x,y;
	char c;
	cin>>s1>>s2>>n;
	
	for(int i=0;i<n;i++)
	{
		scanf("%d %c %d",&x,&c,&y);
		num[x].next=y;
		num[x].flag=false;
	}
	
	for(int i=s1;i!=-1;i=num[i].next)
	{
		num[i].flag=true;
	}
	
	for(int i=s2;i!=-1;i=num[i].next)
	{
		if(num[i].flag==true)
		{
			printf("%05d",i);
			return 0;
		}
	}
	printf("-1");
	return 0;
}

分析:

静态数组的话,设置大小我们一般来说都是题目给定大小设置的,然后通过设置相关的值进行操作。

  • 为了可以更直白的表示数据的情况,我们可以next[x]=y;即x的下一个指针为y值,然后不断迭代,进行实现。
  • 如果是指针的话,我们一般是要对null进行判断,然后生成相关属性。
  • 该题中不存链表相同后裂开的情况,所以可以简化。并且字符没有作用。
  • 冲就完事
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值