/*************************
题意:
给出一堆内存节点
每个节点都有节点地址、key值和下地址
请将以head为首的链表进行排序,输出该链表
************************/
/************************
解题思路与注意点:
题目不难,但是需要注意的细节非常多
1.输入中,其实包含了多条不同的链表。
而你要排序并输出的,是以head为首的链表
2.可能让你排序的是空链表,即以-1为首的链表
3.用%05d输出地址
*************************/
/***********************
笔记:
查坑点时,注意链表为空的情况
*********************/
#include<iostream>
#include<stdio.h>
#include<string>
#include<vector>
#include<queue>
#include<stdlib.h>
#include<algorithm>
#include<string.h>
#include<stack>
#include<map>
#include<unordered_map>
using namespace std;
#define M 200000
#define INF 0x7fffffff
struct Node{
int addr;
int key;
int Next;
};
bool cmp(Node a,Node b){
return a.key<b.key;
}
Node MemNode[M];
int main(){
int n,head,m,key,Next,i;
vector<Node> List;
Node p;
scanf("%d%d",&n,&head);
for(i=0;i<n;i++){
scanf("%d%d%d",&m,&key,&Next);
p.addr=m;
p.key=key;
p.Next=Next;
MemNode[m]=p;
}
int ListLen=0;
while(head!=-1){
List.push_back(MemNode[head]);
head=MemNode[head].Next;
ListLen++;
}
//空链表的情况
if(List.size()==0){
printf("0 -1\n");
return 0;
}
sort(List.begin(),List.end(),cmp);
printf("%d %05d\n",ListLen,List[0].addr);
for(i=0;i<ListLen;i++){
printf("%05d %d ",List[i].addr,List[i].key);
if(i!=ListLen-1){
printf("%05d\n",List[i+1].addr);
}
else{
printf("-1\n");
}
}
return 0;
}
PAT 1052. Linked List Sorting (25) 链表排序,链表特殊情况判断
最新推荐文章于 2022-12-17 10:00:00 发布