PAT Advanced 1052 【Linked List Sorting】(25)

分析:链表中存在无效结点,需要设置有效位进行标记,另外最后一个测试点head=-1。。此时输出0 -1。

代码:

#include<iostream>
#include<algorithm>
#include<cstdio>
using namespace std;
const int maxn = 1e5+10;
struct Node{
	int data, addr, next, valid=0;
	void read(){
		scanf("%d%d", &data, &next);
	}
	bool operator < (const Node &b) const{
		return valid == b.valid ? data < b.data : valid > b.valid;
	}
}node[maxn];
int main(){
	//freopen("aa.txt", "r", stdin);
	int n, head, addr, len = 0;
	scanf("%d%d", &n, &head);
	for(int i = 0; i<n; i++) {
		scanf("%d", &addr);
		node[addr].addr = addr;
		node[addr].read();
	}
	if(head == -1){
		cout << "0 -1\n";
		return 0;
	}
	while(head != -1){
		len++;
		node[head].valid = 1;
		head = node[head].next;
	}
	sort(node, node+maxn);
	printf("%d %05d\n", len, node[0].addr);
	for(int i = 0; i<len; i++){
		printf("%05d %d ", node[i].addr, node[i].data);
		i!=len-1 ? printf("%05d\n", node[i+1].addr) : printf("-1\n");
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/gq__97/article/details/81810712