PAT--L2-022 重排链表------链表
题目描述:
给定一个单链表 L 1 →L 2 →⋯→L n−1 →L n ,请编写程序将链表重新排列为 L n →L 1 →L n−1 →L 2 →⋯。例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2→4→3。
输入格式:
每个输入包含1个测试用例。每个测试用例第1行给出第1个结点的地址和结点总个数,即正整数N (≤10 5 )。结点的地址是5位非负整数,NULL地址用−1表示。
接下来有N行,每行格式为:
Address Data Next
其中Address是结点地址;Data是该结点保存的数据,为不超过10 5 的正整数;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<iostream>
using namespace std;
struct node
{
int addr,data,next;
}li[100000];
int main()
{
int a,n,ad;
scanf("%d%d",&a,&n);
node m[100000];
for(int i=0;i<n;i++){
scanf("%d",&ad);
scanf("%d%d",&li[ad].data,&li[ad].next);
li[ad].addr=ad;
m[li[ad].data].addr=ad;
}
int cnt[n+1]={0},temp,ex[n+1]={0},flag=0,ma;
for(ma=0;a!=-1;ma++){
cnt[ma]=li[a].data;
a=li[a].next;
}
for(int i=0,j=ma-1,k=0;i<=j;k++){
if(!flag){
ex[k]=cnt[j--];
flag=1;
}
else {
ex[k]=cnt[i++];
flag=0;
}
}
for(int i=0;i<ma;i++){
if(i==0) printf("%05d %d ",m[ex[i]].addr,ex[i]);
else printf("%05d\n%05d %d ",m[ex[i]].addr,m[ex[i]].addr,ex[i]);
}
printf("-1");
return 0;
}
来总结一下:
1)类似这样的题,用结构体来表示节点信息的话会更加的方便。
2)结构体定义了两个数组,li[]数组是以结点的地址为下标,m[]数组是以结点的数据data为下标,(m[]数组中只需要记录其地址即可)前者方便换成链式,后者方便换完之后输出。
3)先把他们的数据换好后,再按照m[]数组输出。
4)我输出的结构是两个一组,一个是其地址,一个是其数据,最后输出-1。
- java并发编程学习:用 Semaphore (信号量)控制并发资源
- java并发编程学习: ThreadLocal使用及原理
- 使用Autofac IOC组织多项目应用程序
- 国内首个“人工智能与变革管理研究院”成立
- 解决WordPress缩略图插件timthumb不支持站外图片的问题
- 让 http 2来得更猛烈些吧
- SQL Server 2008基于策略的管理
- centos系统安装Python
- rpc框架之 thrift连接池实现
- .NET Core全新路线图
- jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
- WordPress自定义栏目运用实例II:添加文章Meta标签(keywords /description)
- 《Deep Learning with Python》第一章 1.1 人工智能、机器学习和深度学习
- boost::function的用法
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Golang/Go goroutine调度器原理/实现
- 如何定位 golang 进程 hang 死的 bug
- Docker/Dockerfile debug调试技巧
- 使用 HTTP/2 提升性能的几个建议
- 玩树莓派(raspberry pi) 2/3 raspbian的遇到的一些问题
- Dnsmasq加速本地DNS请求
- swoole深入学习 2. tcp Server和tcp Client
- 一切皆Socket
- Go代码重构:23倍的性能爆增
- 分布式系统的一致性协议之 2PC 和 3PC
- Docker快速搭建WordPress博客网站
- Elasticsearch入门,这一篇就够了
- 玩转 lua in Redis
- 用docker快速搭建wordpress博客
- 生产环境优雅的重启基于Nginx、Tornado的Web服务进程