L2-2 重排链表(25 分)
2018-03-22 10:56
253 查看
给定一个单链表 L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln−1→L2→⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。
输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。
输出格式:
对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。
输入样例:
00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:
68237 6 00100
00100 1 99999
99999 5 12309
12309 2 00000
00000 4 33218
33218 3 -1
输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤105)。结点的地址是5位非负整数,NULL地址用−1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为不超过105的正整数;Next是下一结点的地址。题目保证给出的链表上至少有两个结点。
输出格式:
对每个测试用例,顺序输出重排后的结果链表,其上每个结点占一行,格式与输入相同。
输入样例:
00100 6
00000 4 99999
00100 1 12309
68237 6 -1
33218 3 00000
99999 5 68237
12309 2 33218
输出样例:
68237 6 00100
00100 1 99999
99999 5 12309
12309 2 00000
00000 4 33218
33218 3 -1
#include<stdio.h> #include<stdlib.h> #include<string.h> struct node { int ad,data,next; }a[100010]; int b[100001],aa[100001]; int main() { int ad,n,i; int num = 0; int add,data,next; scanf("%d %d",&ad,&n); for(i=0;i<n;i++) { scanf("%d %d %d",&add,&data,&next); a[add].ad = add; a[add].data = data; a[add].next = next; } while(ad!=-1) { b[num++] = ad; ad = a[ad].next; } int x=0,l=0,r=num-1; while(l<=r) { if(l == r) aa[x++] = b[l++]; else { aa[x++] = b[r--]; aa[x++] = b[l++]; } } for(i=0;i<x-1;i++) { printf("%05d %d %05d\n",aa[i],a[aa[i]].data,aa[i+1]); } printf("%05d %d %d\n",aa[x-1],a[aa[x-1]].data,-1); return 0; }
相关文章推荐
- L2-2 重排链表(25 分)
- L2-2 重排链表(25 分)
- L2-022. 重排链表
- 天梯赛 L2-002 链表去重 和 L2-022 重排链表
- L2-022. 重排链表
- L2-022. 重排链表(变型)
- 天梯赛L2-022【重排链表】
- L2-022. 重排链表
- L2-022. 重排链表
- 链表系列 - [LeetCode] 链表的交错重排L1,Ln,L2,Ln-1 ....
- PAT L2-022 重排链表 (deque双向队列)
- L2-022. 重排链表
- L2-022. 重排链表
- L2-022. 重排链表
- 团体程序设计天梯赛L2-022 重排链表
- 重排链表 未完待续 L2-022
- L2-022. 重排链表
- 2017年团体程序设计天梯赛-总决赛 L2-2. 重排链表
- L2-022. 重排链表
- L2-022. 重排链表