1074.Reversing Linked List

【題意】
        對於一個存數的鏈表,每k個節點倒置一次,從頭結點到尾節點輸出結果

【思路】
        先用map存下輸入的節點,然後按照從頭到尾的順序放入一個vector中,最後藉助reverse函數即可實現倒置

【注意點】

        之前做1052題的時候我默認所有節點都是有用的,結果錯了幾次才發現可能有多餘節點。這次一開始就注意了這個問題於是1A了,估計也有設置相同的陷阱


#include <iostream>
#include <cstdio>
#include <vector>
#include <map>
#include <algorithm>
using namespace std;

typedef struct{
	int addr;
	int value;
	int next;
}node;

int main(int argc, char const *argv[])
{
	int id,n,k;
	vector<node> lis;
	map<int,pair<int,int>> input;

	cin >> id >> n >> k;
	for(int i=0; i<n; i++){
		int addr,value,next;
		cin >> addr >> value >> next;
		input[addr] = pair<int,int>(value,next);
	}

	while(id!=-1){
		node tmp;
		tmp.addr = id;
		tmp.value = input[id].first;
		tmp.next = input[id].second;
		lis.push_back(tmp);
		id = input[id].second;
	}

	int left,right;
	left = 0;
	right = k;
	while(right<=lis.size()){
		reverse(lis.begin()+left,lis.begin()+right);
		left = right;
		right = left+k;
	}

	for(int i=0; i<lis.size(); i++){
		printf("%05d %d ", lis[i].addr, lis[i].value);
		if(i<lis.size()-1){
			printf("%05d\n", lis[i+1].addr);
		}
		else{
			cout << -1;
		}
	}

	system("pause");
	return 0;
}


發佈了99 篇原創文章 · 獲贊 0 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章