zoukankan      html  css  js  c++  java
  • PAT 1074. Reversing Linked List

      1 #include <cstdio>
      2 #include <cstdlib>
      3 #include <iostream>
      4 #include <unordered_map>
      5 
      6 using namespace std;
      7 
      8 class Node {
      9 public:
     10     int data;
     11     int next;
     12     Node() : data(0), next(0) {}
     13     Node(int d, int n):data(d), next(n){}
     14 };
     15 
     16 int reverse_help(int head, int k, unordered_map<int, Node>& mem) {
     17     if (head == -1) {
     18         return -1;
     19     }
     20 
     21     int cur = head;
     22     int prev= -1;
     23     while (cur != -1) {
     24         if (k == 0) {
     25              break;
     26         }
     27         int tmp = mem[cur].next;
     28         mem[cur].next = prev;
     29         prev = cur;
     30         cur = tmp;
     31 
     32         k--;
     33     }
     34     mem[head].next = cur;
     35     return prev;
     36 }
     37 
     38 int reverse(int head, int k, unordered_map<int, Node>& mem, int n) {
     39     if (head == -1) {
     40         return -1;
     41     }
     42     
     43     int nhead = -1;
     44     int cur = head;
     45     int pre = -1; 
     46 
     47     while (cur != -1) {
     48         int t = reverse_help(cur, k, mem);
     49         if (nhead == -1) {
     50             nhead = t;
     51         }
     52         if (pre != -1) {
     53             mem[pre].next = t;
     54         }
     55         pre = cur;
     56         cur = mem[cur].next;
     57         n -= k;
     58         if (n < k) {
     59             break;
     60         }
     61     }
     62 
     63     return nhead;
     64 }
     65 
     66 void print(int head, unordered_map<int, Node>& mem) {
     67     int cur = head;
     68     while(cur != -1) {
     69         Node& cnode = mem[cur];
     70         if (cnode.next != -1) {
     71             printf("%05d %d %05d
    ", cur, cnode.data, cnode.next);
     72         } else {
     73             printf("%05d %d %d
    ", cur, cnode.data, cnode.next);
     74         }
     75         cur = mem[cur].next;
     76     }
     77 }
     78 
     79 int count(int head, unordered_map<int, Node>& mem) {
     80     int cnt = 0;
     81     int cur = head;
     82     while(cur != -1) {
     83         cnt++;
     84         cur = mem[cur].next;
     85     }
     86     return cnt;
     87 }
     88 
     89 int main() {
     90     
     91     int head, n, k;
     92     scanf("%d%d%d", &head, &n, &k);
     93     
     94     unordered_map<int, Node> mem;
     95 
     96     for (int i=0; i<n; i++) {
     97         int addr, data, next;
     98         scanf("%d%d%d", &addr, &data, &next);
     99         mem.insert(make_pair(addr, Node(data, next)));
    100     }
    101     
    102     cout<<"===="<<endl;
    103     print(head, mem);
    104     cout<<"===="<<endl;
    105     head = reverse(head, k, mem, count(head, mem));
    106     print(head, mem);
    107 
    108     return 0;
    109 }

    卧槽,敢再无聊点么,输入节点数据竟然有不含在链表里的节点数据。

  • 相关阅读:
    redis深度理解底层锁原理
    深度完整的了解MySQL锁
    今天的文章很不一般
    利用h5来进行定位当前位置
    workerman(环境+初识)
    Nginx(防止压力测试的恶意攻击)
    Java Web框架——自己动手实现一个简化版的Spring IOC框架
    设计模式——策略模式
    数据库——深入理解MySQL事务
    缓存——Redis和Memcache的对比
  • 原文地址:https://www.cnblogs.com/lailailai/p/4322630.html
Copyright © 2011-2022 走看看