L2-022. 重排链表
L2-022. 重排链表
给定一个单链表 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
- 思路分析:
注意可能不是一个链表,即最后的有效结点个数不一定是n,要自己数。这个是链表中常见的陷阱,要多加注意。
重排序的时候,从num-1到num/2的序号为奇数1 3 5.... 从0到num/2-1的序号为2 4 6....
- #include<iostream>
- #include<cstring>
- #include<string>
- #include<queue>
- #include<algorithm>
- #include<cmath>
- #include<vector>
- #include<map>
- #define inf 0x3f3f3f3f
- using namespace std;
- struct node
- {
- int v;
- int nxt;
- }a[];
- struct node1
- {
- int v;
- int id;
- int nxt;
- int bh;
- }b[];
- map<int,int>mp;
- bool cmp( node1 x,node1 y)
- {
- return x.bh<y.bh;
- }
- int main()
- {
- int p=;
- int h;
- cin>>h;
- a[h].v=h;
- int n;
- cin>>n;
- for(int i=;i<=n;i++)
- {
- int x,v,y;
- cin>>x>>v>>y;
- a[x].v=v;
- a[x].nxt=y;
- }
- b[].id=h;
- b[].nxt =a[h].nxt ;
- b[].v=a[h].v;
- int i;
- for(i=;i<=n;i++)
- {
- int temp=b[i-].nxt ;
- b[i].id=temp;
- b[i].nxt =a[temp].nxt ;
- b[i].v=a[temp].v;
- if(b[i].nxt==-) break;//可能存在无效的
- }
- n=i;
- int k=;
- /*for(i=1;i<=n;i++)
- {
- cout<<b[i].bh<<" "<<b[i].id<<" "<<b[i].v<<" "<<b[i].nxt <<endl;
- }*/
- for(i=;i<=n/;i++)//只要改变编号再排个序就可以了
- {
- b[i].bh=k;
- k+=;
- }
- if(n%==) k=k--;
- else k=k-;
- for(int i=n/+;i<=n;i++)
- {
- b[i].bh=k;
- k-=;
- }
- /*cout<<endl<<endl;
- for(i=1;i<=n;i++)
- {
- cout<<b[i].bh<<" "<<b[i].id<<" "<<b[i].v<<" "<<b[i].nxt <<endl;
- }*/
- sort(b+,b+n+,cmp);
- /*cout<<endl<<endl;*/
- for(int i=;i<=n;i++)
- {
- printf("%05d %d %05d\n",b[i-].id,b[i-].v,b[i].id);
- }
- printf("%05d %d -1",b[n].id,b[n].v);
- }
L2-022. 重排链表的更多相关文章
- pat甲级 团体天梯赛 L2-022. 重排链表
L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...
- GPLT天梯赛 L2-022. 重排链表
L2-022. 重排链表 时间限制 500 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 给定一个单链表 L1→L2→...→Ln-1→Ln,请 ...
- Leetcode 143.重排链表
重排链表 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换. 示 ...
- Java实现 LeetCode 143 重排链表
143. 重排链表 给定一个单链表 L:L0→L1→-→Ln-1→Ln , 将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→- 你不能只是单纯的改变节点内部的值,而是需要实际的进行节 ...
- 【Warrior刷题笔记】143.重排链表 【线性化 || 双指针+翻转链表+链表合并】详细注释
题目一 力扣143.重排链表 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/reorder-list/ 1.描述 给定一个单链表L的头节点he ...
- L2-022 重排链表 (25 分)
L2-022 重排链表 (25 分) 给定一个单链表 L1→L2→⋯→Ln−1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln−1→L2→⋯.例 ...
- LeetCode 重排链表 OPPO笔试
重排链表 几个关键点: 1. 双指针(快慢指针找中点)(用于反转后一部分) 2. 反转后一部分 (reverse函数) 3. 合并链表 合并的时候在笔试的时候想了一种比我之前想的简单的方法 从slow ...
- 天梯赛 L2-022. (数组模拟链表) 重排链表
题目链接 题目描述 给定一个单链表 L1→L2→...→Ln-1→Ln,请编写程序将链表重新排列为 Ln→L1→Ln-1→L2→....例如:给定L为1→2→3→4→5→6,则输出应该为6→1→5→2 ...
- 143 Reorder List 重排链表
给定一个单链表L:L0→L1→…→Ln-1→Ln,重新排列后为: L0→Ln→L1→Ln-1→L2→Ln-2→…必须在不改变节点的值的情况下进行原地操作.例如,给定链表 {1,2,3,4},按要求重排 ...
随机推荐
- JQuery 操作 iframe
JQuery访问iframe内的元素 $("iframe#Main", top.document).contents().find("#id"); JQuery ...
- centos7 下安装eclipse
1 在下面路径下载 eclipse-jee-neon-2-linux-gtk-x86_64.tar.gzhttp://eclipse.stu.edu.tw/technology/epp/downloa ...
- Kubernetes TLS认证
转自: https://mritd.me/2018/01/07/kubernetes-tls-bootstrapping-note/ 前段时间撸了一会 Kubernetes 官方文档,在查看 TLS ...
- MapReduce-边数据
边数据 边数据(side data)是作业所需的额外的只读数据,以辅助处理主数据集.所面临的挑战在于如何使所有map或reduce任务(这些任务散布在集群内部)都能够方便而高效地使用边数据. 利用Jo ...
- nodejs mysql 操作数据库方法一详解
nodejs mysql 数据查询例子 时间 2014-11-11 15:28:01 姜糖水原文 http://www.cnphp6.com/archives/59864 1.安装nodejs 2 ...
- Pycharm更换pip源为国内
Python里的pip是官方自带的源,国内使用pip安装的时候十分缓慢,所以最好是更换成中国国内的源地址. 目前国内靠谱的 pip 镜像源有: 清华: https://pypi.tuna.tsingh ...
- svn更新时忽略指定文件或文件夹
选择一个收SVN控制的文件夹->右击->选择TortoiseSVN->更新至版本,就会出现 选择更新深度为工作副本,再选择项目,出现如图中所示的界面,把不想更新的文件或者文件夹前 ...
- 智课雅思词汇---十五、前缀co-com-con-col-cor-是什么意思
智课雅思词汇---十五.前缀co-com-con-col-cor-是什么意思 一.总结 一句话总结:前缀:co- 表示"共同", 通常放在元音词根前 1.前缀co-com-con- ...
- [项目部署] CentOs7 安装 MySQL/Tomcat/JDK 笔记
0.安装 MySQL cd /usr/local/ # 新增yum源 rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el7-.no ...
- Oracle Index Clustering Factor(集群因子)
一.本文说明: 今天在做测试的时候发现字段上有索引,但是执行计划就是不走索引,经过在网上查找才发现原来是索引的集群因子过高导致的.本文属于转载 二.官网说明 The index clustering ...