【L2-022 重排链表】

L2-022 重排链表

题目描述

在这里插入图片描述

输入样例:

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

思路

用一个结构体存储节点信息。节点数量1e5,用map存节点下标使得访问下标O(1),注意输出格式要求。

完整代码

#include<bits/stdc++.h>
using namespace std;
const int N = 101010;

struct Node
{
	int val;
	int ars;
	int ne;
}node[N], sunxu[N];

int main()
{
	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	int begin,n; cin >> begin >> n;
	map<int,int>mp;
	for(int i=0; i<n; i++)
	{
		cin >> node[i].ars >> node[i].val >> node[i].ne;
		mp[node[i].ars] = i;
	}
	
	int k = begin, cnt = 0;
	for(int i=0; i<n; i++)
	{
		cnt ++;
		k = mp[k]; //转换为下标 
		sunxu[i] = node[k];
		k = node[k].ne; //转换为下一个地址 
		if(k==-1) break;
	}
	
	int l=0, r=cnt-1;
	printf("%05d %d ",sunxu[r].ars,sunxu[r].val);
	printf("%05d\n%05d %d ",sunxu[l].ars,sunxu[l].ars,sunxu[l].val);
	l++, r--;
	
	while(l<=r){
		if(l<r){
		printf("%05d\n%05d %d ",sunxu[r].ars,sunxu[r].ars,sunxu[r].val);
		printf("%05d\n%05d %d ",sunxu[l].ars,sunxu[l].ars,sunxu[l].val);
    	}
    	else{//剩下最后一个节点
    		printf("%05d\n%05d %d ",sunxu[r].ars,sunxu[r].ars,sunxu[r].val);
		}
		r--, l++;
	}
	printf("-1");
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值