02-线性结构3 Reversing Linked List (25分) 简单

题解 静态链表

先用了map确定他们的顺序
再将mp赋值给结构体数组
在结构体数组里进行反转
反转用的是reverse函数
有几个地方需要注意 ps: 在注释

#include <iostream>
#include <cstdlib>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;
struct LNode
{
	int Id, Data;
	int Next;
};

int main()
{
	int fistId;
	int N, M;
	cin >> fistId >> N >> M;
	//用id做名字
	map<int, LNode> X;
	X[fistId].Id = fistId;
	for (int i = 0; i < N; i++)
	{
		int a, b, c;
		cin >> a >> b >> c;
		X[a] = {a, b, c};
	}
	LNode ans[100005];
	int index = 0;
	//利用mp遍历整个 这样额外的点也会被忽略了
	for (int i = fistId; i != -1; i = X[i].Next)
	{
		ans[index++] = X[i];
	}
	//反转	注意不是小于等于N 是index 
	//如果是N的话就把额外的点算进去了
	for (int i = 0; i + M <= index; i += M)
	{
		reverse(ans + i, ans + (i + M));
	}
	for (int i = 0; i < index; i++)
	{
		if (i == index - 1)
		{ 
			printf("%05d %d -1\n", ans[i].Id, ans[i].Data);
			break;
		}
		//最坑的一个地方: 必须得是ans[i+1].Id 如果是Next大部分都过不去
		printf("%05d %d %05d\n", ans[i].Id, ans[i].Data, ans[i + 1].Id);
	}
	return 0;
}

发布了106 篇原创文章 · 获赞 25 · 访问量 7208

猜你喜欢

转载自blog.csdn.net/weixin_45653525/article/details/104498405