1074. Reversing Linked List (25)

来源:互联网 发布:mac磁盘越来越小 编辑:程序博客网 时间:2024/05/16 10:48
//用order记录节点的序号!!!#include<cstdio>#include<algorithm>using namespace std;#define maxn 100010struct Node{  int address,data,next;  int order;  Node()  {    address = 0;    data = 0;    next = -1;    order = maxn;  }}node[maxn];bool cmp(Node a, Node b){  return a.order < b.order;}int main(){  int N,K,head,head_back,addrss,data,next;  int count=0,n=0,p=0;  scanf("%d%d%d",&head,&N,&K);  head_back = head;  for(int i=0; i<N; i++)  {    scanf("%d%d%d",&addrss,&data,&next);    node[addrss].data = data;    node[addrss].next = next;    node[addrss].address = addrss;  }  p = head;  while (p != -1)  {    node[p].order = count;    count++;    p = node[p].next;  }  n = count;  sort(node, node+maxn, cmp);  //head = 0;  //while (head < n)  //{  //  printf("%05d %d %05d\n",node[head].address,node[head].data,node[head].next);  //  head++;  //}  for(int i=0; i<n/K; i++)  {    //由于有了order可以使用j-1的地址作为j的下一个地址!    for(int j = (i+1)*K-1; j>i*K; j--)    {      printf("%05d %d %05d\n",node[j].address,node[j].data,node[j-1].address);    }    printf("%05d %d ",node[i*K].address,node[i*K].data);    if(i < n/K  -1)//不是最后一块!    {      printf("%05d\n",node[(i+2)*K-1].address);    }    else//最后一块    {      if(n%K == 0)//是完整块!      {        printf("-1\n");      }      else//剩下的不完整块按正常顺序输出      {        printf("%05d\n",node[(i+1)*K].address);        for(int i = n/K *K; i<n; i++)        {          printf("%05d %d ",node[i].address,node[i].data);          if(i < n-1)            printf("%05d\n",node[i+1].address);          else            printf("-1\n");        }      }    }  }  return 0;}

0 0
原创粉丝点击