1025 反轉連結串列

YuKiCheng發表於2024-04-16

我看其他部落格用的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;
}

相關文章