1025 反转链表

我看其他博客用的reverse,但是下标我真的有点糊涂,以下是参考某位dalao的。

#include <bits/stdc++.h>
using namespace std;
struct node {
	int sno;
	int data;
	int next;
} s[100010];
int main() {
	int start,cnt,fz;//start
	cin>>start>>cnt>>fz;
	for(int i=0; i<cnt; i++) {
		int sno;
		cin>>sno;
		s[sno].sno = sno;
		cin>>s[sno].data>>s[sno].next;
	}
	//start是起始的地址
	int i = start;
	vector<node> vec;
	while(i!=-1) {
		vec.push_back(s[i]);
		i=s[i].next;
	}
	int flag = 0;
	int index = fz - 1;//定位的索引位置
	while(index < vec.size()) {
		//进行反转输出
		for(int i=index; i>index-fz; i--) {
			if(flag==0) {
				printf("%05d %d ",vec[i].sno,vec[i].data);
				flag = 1;
			}else{
				printf("%05d\n%05d %d ",vec[i].sno,vec[i].sno,vec[i].data);
			}
		}
		index += fz;
	}
	//将剩余的部分输出
    index = index - fz + 1;
    for(int i=index;i<vec.size();i++){
    	if(flag==0){
    		printf("%05d %d ",vec[i].sno,vec[i].data);
    		flag = 1;
		}else{
			printf("%05d\n%05d %d ",vec[i].sno,vec[i].sno,vec[i].data);
		}
	}
	cout << "-1\n";
	return 0;
}
posted @ 2024-04-16 13:29  YuKiCheng  阅读(9)  评论(0编辑  收藏  举报