zoukankan      html  css  js  c++  java
  • 剑指Offer

    剑指Offer - 九度1511 - 从尾到头打印链表
    2013-11-29 21:08
    题目描述:

    输入一个链表,从尾到头打印链表每个节点的值。

    输入:

    每个输入文件仅包含一组测试样例。
    每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。当输入到-1时代表链表输入完毕。-1本身不属于链表。

    输出:

    对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行。

    样例输入:
    1
    2
    3
    4
    5
    -1
    
    样例输出:
    5
    4
    3
    2
    1
    题意分析:
      给定一条单链表,从未到头打印出来。第一个念头是可以用头递归的写法进行倒序输出,但不论头递归还是尾递归都不是个会写代码的人该写出来的,因为递归调用中的栈操作开销太累,而且百万级的数据就能搞出栈溢出了。所以可以采取先反转链表,再输出的方法。至于输出完了要不要再转回去,就看数据还有没有人要用了。不过从原则上来说,既然要求设计的是逆序输出链表,就不应该改变原始数据,应该在处理完了以后把链表给转回来的。本题中的数据时一次性的,我索性输出完了就给释放掉了。
      时间复杂度O(n),空间复杂度O(1)。
     1 // 650320    zhuli19901106    1511    Accepted    点击此处查看所有case的执行结果    5088KB    731B    90MS
     2 // 201311122057
     3 #include <cstdio>
     4 #include <vector>
     5 using namespace std;
     6 
     7 class ListNode{
     8 public:
     9     int val;
    10     ListNode *next;
    11     ListNode(int _val = 0) : val(_val), next(NULL){}
    12 };
    13 
    14 int main()
    15 {
    16     ListNode *root;
    17     ListNode *tail;
    18     int n;
    19     vector<ListNode *> vv;
    20     
    21     root = new ListNode();
    22     tail = root;
    23     vv.clear();
    24     while(scanf("%d", &n) == 1 && n >= 0){
    25         tail->next = new ListNode(n);
    26         tail = tail->next;
    27         vv.push_back(tail);
    28     }
    29     
    30     while(vv.size() > 0){
    31         printf("%d
    ", vv[vv.size() - 1]->val);
    32         vv.pop_back();
    33     }
    34     
    35     tail = root;
    36     while(tail != NULL){
    37         root = tail->next;
    38         delete tail;
    39         tail = root;
    40     }
    41     
    42     return 0;
    43 }
     
  • 相关阅读:
    ABI与ARM,X86的概念
    数据库升级,如何操作
    shell脚本
    数据库设计范式
    jQuery基础教程
    git clone 失败 fatal: early EOF fatal: the remote end hung up unexpectedly fatal: index-pack failed
    windowserver中PowerShell禁止脚本执行的解决方法
    移动端延迟300ms的原因以及解决方案
    将伪数组转为真正的数组
    cnpm安装时候出现“Unexpected end of JSON input“的解决办法
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3450320.html
Copyright © 2011-2022 走看看