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},按要求重排 ...
随机推荐
- Kubernetes Kube-proxy
Kube-proxy主要负责Service的实现. kube-proxy enables the Kubernetes service abstraction by maintaining netwo ...
- Go panic recover
panic 1. 停止当前函数执行 2. 一直向上返回,执行每一层的defer 3. 如果没有遇到recover, 程序退出 recover 1. 仅在defer调用中使用 2. 获取panic的值 ...
- Mysql -- You can't specify target table 'address' for update in FROM clause
做地址管理时,需要先根据要设为默认的地址的用户将用户的其他地址都设置为非默认 需要select出用户id然后update 原语句 update address set isdeafult = 0 wh ...
- processing学习整理---Structure
1.语法介绍:与java很相近,可以认为就是java. 2.运行命令(linux): processing-java --output=/tmp/processing-xx --run --force ...
- python爬虫-异常处理
URLerror产生原因: 网络未连接(即不能上网) 服务器不存在 #-*-coding:utf--*- import urllib2 request=urllib2.Request('http:// ...
- vc 加载外部资源,释放DLL
#include "stdafx.h"#include "resource.h" #include <Windows.h> #include < ...
- 阅读linux内核代码的工具-- Source Insight
http://blog.csdn.net/luckyaslan/article/details/7869235 Step 1:安装Source Insight并启动程序 可以进入图1界面,在工具条上有 ...
- BZOJ3242/UOJ126 [Noi2013]快餐店
本文版权归ljh2000和博客园共有,欢迎转载,但须保留此声明,并给出原文链接,谢谢合作. 本文作者:ljh2000 作者博客:http://www.cnblogs.com/ljh2000-jump/ ...
- DB处理大量数据处理日志报错问题
因为当插入.更新或删除大批量数据的时候,有时候会出现事务日志满的问题,所以解决步骤 1.连接到当前数据库 db2 connect to uppdb 2.查看数据库配置文件 db2 get db cf ...
- javascript删除JSON元素
首先要搞清JSON的数据格式,我这里所说的JSON都是指javascript中的. JSON数据是由对象和数组数据结构组成,我们只要学会javascript中对对象和数组的删除方法即可对JSON项进行 ...