PAT 1025 反转链表

来源:互联网 发布:手机制作漫画软件 编辑:程序博客网 时间:2024/06/06 03:29
#include <stdio.h>#include <string.h>#define MAXNODE 100001struct Node{  int data;  char addr[8];  char next[8];}node[MAXNODE];struct Node *pnode[MAXNODE];int main(void){  char ad[8];  int nnode, k;  int i, j;  struct Node *tmp;  char *next = ad;  freopen("pat1025.in", "r", stdin);  scanf("%s %d %d", ad, &nnode, &k);  for (i = 0; i < nnode; i++) {    scanf("%s %d %s", node[i].addr, &node[i].data, node[i].next);    pnode[i] = &node[i];  }  /* sort according to the list next domain */  for (i = 0; i < nnode; i++) {    for(j = i; j < nnode; j++)      {        if(strcmp(pnode[j]->addr, next) == 0)          {            /* swap i and j */            if(i != j)              {                tmp = pnode[i];                pnode[i] = pnode[j];                pnode[j] = tmp;              }            next = pnode[i]->next;            break;          }      }    /* there are some invalid nodes */    if(strcmp(next, "-1") == 0) break;  }  /* reverse by swapping for every k segment.  */  nnode = i + 1; // update nnode  struct Node **st, **end;  for (i = k - 1; i < nnode; i+=k) {    for (st = &pnode[i - k + 1], end = &pnode[i]; st < end; ++st, --end){      tmp = *st;      *st = *end;      *end = tmp;    }  }  /* build next value */  for(i = 0; i < nnode - 1; ++i)    strcpy(pnode[i]->next,pnode[i+1]->addr);  strcpy(pnode[i]->next, "-1");  for (i = 0; i < nnode; i++) {    printf("%s %d %s\n", pnode[i]->addr, pnode[i]->data, pnode[i]->next);  }  return(0);}

0 0
原创粉丝点击