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

#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;
}