• 1
  • 2
  • 3
  • 4
  • 5
  • 6

1025 反转链表 (25分)

没做出来,直接附上大佬的代码学习

#include 
#include 
using namespace std;
int main() {
	int first, k, n, temp;
	cin >> first >> n >> k;
	int data[100005], next[100005], list[100005];
	for (int i = 0; i < n; i++) { cin >> temp;
		cin >> data[temp] >> next[temp];
	}
	int sum = 0;//不一定所有的输入的结点都是有用的,加个计数器
	while (first != -1) {
		list[sum++] = first;
		first = next[first];
	}
	for (int i = 0; i < (sum - sum % k); i += k)//每k个反转
		reverse(begin(list) + i, begin(list) + i + k);
	for (int i = 0; i < sum - 1; i++)
		printf("%05d %d %05d\n", list[i], data[list[i]], list[i + 1]);
	printf("%05d %d -1", list[sum - 1], data[list[sum - 1]]);
	return 0;
}

关键点

1.reverse

2.printf("%05d %d %05d\n")

点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注