1052 Linked List Sorting
题意很简单,下面列出需要注意的几个边界点:
1.题目要求输出的是在这个链表上的点,可能有的节点并不是题目所给的头结点之后的节点,是别的链表的…需要排除
2.对于空链表,我们需要输出0 -1,这里对应最后一个测试点4
AC代码
#include <iostream>
#include <algorithm>
using namespace std;
struct node
{
int adr,data;
};
int Link[100005][2];
bool cmp(node a,node b)
{
return a.data < b.data;
}
int main()
{
int n,head;
scanf("%d %d",&n,&head);
node all[n];
for(int i=0;i<n;i++)
{
int x,y,val;
scanf("%d %d %d",&x,&val,&y);
Link[x][0] = val,Link[x][1] = y;
}
int top = 0;
int p = head;
while(p != -1)
{
all[top].adr = p,all[top].data = Link[p][0];
p = Link[p][1];
top++;
}
sort(all,all+top,cmp);
if(top)
printf("%d %05d\n",top,all[0].adr);
else
{
printf("0 -1\n");
return 0;
}
int las = -1;
for(int i=0;i<top;i++)
{
if(las != -1)
printf(" %05d\n",all[i].adr);
printf("%05d %d",all[i].adr,all[i].data);
las = 1;
}
printf(" -1\n");
return 0;
}