PAT-2019年秋季考试-乙级 7-5 链表合并

7-5 链表合并在这里插入图片描述
这个题真的真的真的。。。乙级题库里链表的题我觉得比这道难
坑的话 我觉得就是先要判断l1 和 l2谁长(我第一次提交就没判断。。,好像就一个测试点是1比2长。。)
之后就是reverse函数 这个《算法笔记》里有。。我都用好几个月了。。。
最后就是地址要5位数输出%05d 没啦
甲级见

#include<stdio.h>
#include<algorithm>
using namespace std;
struct node{
	int address;
	int next;
	int data;
};
int main(){
	node a[100000];
	int abegin,bbegin,n;
	scanf("%d %d %d",&abegin,&bbegin,&n);
	for(int i=0;i<n;i++){
		int add,val,nex;
		scanf("%d %d %d",&add,&val,&nex);
		a[add].address=add;
		a[add].data=val;
		a[add].next=nex;
	}
	int num1=0,num2=0;
	node l[100000];
	node s[100000];
	int p=abegin;
	while(p!=-1){
		l[num1++]=a[p];
		p=a[p].next;
	}
	

	p=bbegin;
	while(p!=-1){
		s[num2++]=a[p];
		p=a[p].next;
	}
	if(num1>num2){
	reverse(s,s+num2);
	int lnum=0,snum=0,sum=0;
	while(sum<num1+num2){
		a[sum++]=l[lnum++];
		a[sum++]=l[lnum++];
		if(snum<num2) a[sum++]=s[snum++];
	} 
	for(int i=0;i<num1+num2;i++){
		if(i!=num1+num2-1) printf("%05d %d %05d\n",a[i].address,a[i].data,a[i+1].address);
		else printf("%05d %d -1\n",a[i].address,a[i].data);
	}
	}
	else{
		reverse(l,l+num1);
		int lnum=0,snum=0,sum=0;
		while(sum<num1+num2){
		a[sum++]=s[snum++];
		a[sum++]=s[snum++];
		if(lnum<num1) a[sum++]=l[lnum++];
		} 
	for(int i=0;i<num1+num2;i++){
		if(i!=num1+num2-1) printf("%05d %d %05d\n",a[i].address,a[i].data,a[i+1].address);
		else printf("%05d %d -1\n",a[i].address,a[i].data);
	}
	}
	return 0;
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值