1075 链表元素分类 (25 分)

这是看了柳神的代码之后改的,我自己写的代码第五个测试点死活通不过。
之前学习链表想到拼接链表的办法,虽然有点麻烦,但是我决定尝试一下,我知道很可能是某个地方拼接失误了,不然肯定能通过的。我把代码放在后面,如果有看出我错误的同学,麻烦指正一下。

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
	int add,data,next;
}Node[maxn];
int main(){
	int st,n,k,a;
	vector<int> v[3];
	scanf("%d%d%d",&st,&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&a);
		Node[a].add=a;
		scanf("%d%d",&Node[a].data,&Node[a].next);
	}
	int p=st;
	while(p!=-1){
		if(Node[p].data < 0){
			v[0].push_back(p);
		}else if(Node[p].data<=k && Node[p].data>=0){
			v[1].push_back(p);
		}else {
			v[2].push_back(p);
		}
		p=Node[p].next;
	}
	int flag=0; 
	for(int i=0;i<3;i++){
		for(int j=0;j<v[i].size(); j++){
			if(flag==0){
				printf("%05d %d",v[i][j],Node[v[i][j]].data);
				flag=1;
			} else {
				printf(" %05d\n%05d %d",v[i][j],v[i][j],Node[v[i][j]].data);
			}	
		}	
	}
	printf(" -1\n");
	return 0;
}

链表拼接

22分

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e5+5;
struct node{
	int add,data,next,flag;
}Node[maxn];
int main(){
	int st,n,k,add;
	scanf("%d%d%d",&st,&n,&k);
	for(int i=0;i<n;i++){
		scanf("%d",&add);
		Node[add].add=add;
		scanf("%d%d",&Node[add].data,&Node[add].next);
	}
	int p=st;
	int h1=-1,t1=0,h2=-1,t2=0,h3=-1,t3=0,cnt=0;
	while(p!=-1){
		if(Node[p].data < 0){
			if(h1==-1){
				h1=p;
				t1=p;
			}else{
				Node[t1].next=p;
				t1=p;
			}
		}else if(Node[p].data<=k&&Node[p].data>=0){
			if(h2==-1){
				h2=p;
				t2=p;
			}else{
				Node[t2].next=p;
				t2=p;
			}
		}else {
			if(h3==-1){
				h3=p;
				t3=p;
			}else{
				Node[t3].next=p;
				t3=p;
			}
		}
		p=Node[p].next;
		cnt++;
	}

	int newh=1e5+2;
	if(h1!=-1){
		Node[newh].next=h1;
		if(h2!=-1) {
			Node[t1].next=h2;
			if(h3!=-1){
				Node[t2].next=h3;
			}
		}else{
			if(h3!=-1) Node[t1].next=h3;
		}	
	}else{
		if(h2!=-1) {
			Node[newh].next=h2;
			if(h3!=-1){
				Node[t2].next=h3;
			}
		}else{
			if(h3!=-1) Node[newh].next=h3;
		}
		
	}
	
	p=Node[newh].next;
	for(int i=0;i<cnt;i++){
		if(i!=n-1) printf("%05d %d %05d\n",Node[p].add,Node[p].data,Node[p].next);
		else printf("%05d %d",Node[p].add,Node[p].data);
		p=Node[p].next;
	}
	printf(" -1\n");
	return 0;
}
全部评论

相关推荐

01-04 07:53
门头沟学院 C++
心愿便利贴:工作了以后回头再看待这个问题,从客观的视角来讲是因为每个人对自己的要求不同,学习好的人对自己的要求很高,所以觉得考不好就天塌了,认为自己学习好并且值得一份好工作的人也是一样,找不到符合自己预期的工作肯定也会觉得是侮辱,牛客上有很多名校大学生,肯定会存在这种好学生心态啊,“做题区”从来都不是贬义词,这是大部分普通人赖以生存的路径,这个有什么好嘲讽的,有“好学生心态”没有错,但是不要给自己太大的压力了
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务