02-線性結構3 Reversing Linked List (25分)
阿新 • • 發佈:2019-02-07
#include <iostream> #include <string> #include <unordered_map> #include <vector> #include <algorithm> using namespace std; struct Node{ char addr[6]; int data; char next[6]; }; int main(void) { string firstAddr; int n, k; cin >> firstAddr >> n >> k; //將所有節點儲存 unordered_map<string, Node> nodeMap; nodeMap.reserve(n); Node node; for (int i(0); i < n; ++i) { scanf("%s%d%s", node.addr, &node.data, node.next); nodeMap.insert(pair<string, Node>(node.addr, node)); } //選出所有在連結串列上的節點,依次一個一個串起來。 vector<Node> vec; vec.reserve(n); while (firstAddr != "-1") { vec.push_back(nodeMap[firstAddr]); firstAddr = nodeMap[firstAddr].next; } //每k個逆轉 if (k > 1) { auto iter(vec.begin()), end(vec.end() - k); for (; iter <= end; iter += k) reverse(iter, iter + k); } auto last(vec.size() - 1); for (unsigned i(0); i < last; ++i) printf("%s %d %s\n", vec[i].addr, vec[i].data, vec[i + 1].addr); printf("%s %d %s\n", vec[last].addr, vec[last].data, "-1"); return 0; }