02-线性结构3 Reversing Linked List (25分)

来源:互联网 发布:超星网络课程登录入口 编辑:程序博客网 时间:2024/06/08 16:02


#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;}



0 0
原创粉丝点击