1025. 反转链表

题目在这里


链表不一定可以用链表写,可以用数组存好所有数据。然后将关于位置的数组排好顺序,这样只需要移动数组的位置就行。


#include <iostream>
#include <bits/stdc++.h>
using namespace std;

struct node {
	int data;
	int next;
};

int main()
{
	struct node s[100001];
	int n, m;
	int add;
	cin >> add >> n >> m;
	int address[100001];
	for(int i = 0; i < n; i++) {
		int num;
		cin >> num;
		cin >> s[num].data >> s[num].next;
	}
	int k = 0;
	while(add != -1) {
		address[k++] = add;
		add = s[add].next;
	}

	for(int i = 0; i < k / m; i++) {
		for(int j = 0; j < m / 2; j++) {
			swap(address[j + m * i], address[i * m + m - 1 - j]);
		}
	}
	for(int i = 0; i < k; i++) {
		if(i != k - 1) {
			printf("%05d %d %05d\n", address[i], s[address[i]].data, address[i + 1]);	
		} else {
			printf("%05d %d -1\n", address[i], s[address[i]].data);
		}
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_39227338/article/details/80024090