PAT 1025 反转链表
2016-07-08 15:46
246 查看
#include <stdio.h> #include <string.h> #define MAXNODE 100001 struct 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); }
相关文章推荐
- Swift,语法入门学习
- 模拟简单的时钟
- 工厂模式
- Vysor 插件破解版(beta版本)解决更新正式版本后的收费限制
- c++ 流的注意事项
- 盘块分配--位示图法
- 任务调度中心 (优化版)【原】
- VS插件集
- HDU5438:Ponds(拓扑排序)
- windows 下使用 zip安装包安装MySQL 5.7
- JS:window.onload的使用介绍
- C#笔记_1-动态生成类,程序集
- Android利用ObjectAnimator实现ArcMenu
- echarts获取注册地图方法
- 适用于头像的圆形的ImageView
- Street
- 有些人为什么那么努力
- ORACLE创建表之前判断表是否存在与SQL Server 对比使用
- android studio代码混淆注意问题
- 创业5