1052 Linked List Sorting

#include
#include
#include
#include
#include
#include
using namespace std;
const int maxn = 100010;
struct Node
{
    int address,data,next;
    bool flag;
}node[maxn];

bool cmp(Node a, Node b)
{
    if(a.flag==0 || b.flag==0)
    {
     return a.flag>b.flag;
    }

    else
    return a.data }

int main()
{
    int n,s1;
    int count = 0;
    int data,address,next;

    scanf("%d%d",&n,&s1);
    for(int i=0;i     {
     node[i].flag = 0;
    }
    for(int i=0;i     {
     scanf("%d%d%d",&address,&data,&next);
     node[address].address=address;
     node[address].data = data;
     node[address].next = next;
    }
    for(int begin = s1;begin!=-1;begin=node[begin].next)
    {
     count++;
     node[begin].flag = 1;

    }
    sort(node,node+maxn,cmp);
    if(count==0)
    printf("0 -1\n");
else{
    


    printf("%d %05d\n",count,node[0].address);
    for(int i=0;i     {
     if(i!=count-1)
     printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
     else
     printf("%05d %d -1\n",node[i].address,node[i].data);
    }
}
return 0;

}

错误:1 

for(int i=0;i     {
     if(i!=count-1)
     printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
     else
     printf("%05d %d -1\n",node[i].address,node[i].data);
    }
}

这一部分最初写成:

for(int i=0;i     {
     printf("%05d %d %05d\n",node[i].address,node[i].data,node[i+1].address);
     if(i==count-1)
     printf("%05d %d -1\n",node[i].address,node[i].data);
    }

输出两次最后一行

2、这里最后printf里不是输出node[i].next,而是node[i+1].address

由于重新排序next指针域也要改变

3、特殊情况输出0,-1需要一个if   大else分支

4、需要flag确保cmp 因为输入不一定是在一个链表里的节点

你可能感兴趣的:(算法,数据结构,c++)