zoukankan      html  css  js  c++  java
  • 5-从尾到头打印链表

    题目描写叙述:http://ac.jobdu.com/problem.php?pid=1511
    输入一个链表,从尾到头打印链表每一个节点的值。


    输入:
    每一个输入文件仅包括一组測试例子。


    每一组測试案例包括多行,每行一个大于0的整数,代表一个链表的节点。第一行是链表第一个节点的值,依次类推。

    当输入到-1时代表链表输入完成。

    -1本身不属于链表。


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


    逆序打印链表,我们遍历链表仅仅能从头到尾。如今要求我们从尾到头。

    后进先出,能够想到用栈存储遍历的节点。然后打印出栈序列。


    递归的本质就是栈结构,在打印本节点之前。先打印本节点的下一个节点

    #include <iostream>
    #include <stack>
    using namespace std;
    class Node {
    public:
        int val;
        Node* next;
        Node(int val, Node* next = NULL) {
            this->val = val;
            this->next = next;
        }
    };
    // 递归实现
    void PrintListReversingRecur(Node* head) {
        if (head == NULL)
            return;
        PrintListReversingRecur(head->next);
        cout << head->val << " ";
    }
    // 栈实现
    void PrintListReversingStack(Node* head) {
        stack<Node*> s;
        while (head != NULL) {
            s.push(head);
            head = head->next;
        }
        while (s.empty() == false) {
            cout << s.top()->val << " ";
            s.pop();
        }
        cout << endl;
    }
    int main() {
        Node* head = new Node(1, new Node(2, new Node(3, new Node(4, NULL))));
        for (Node* iter = head; iter != NULL; iter = iter->next)
            cout << iter->val << " ";
        cout << endl;
        cout << "逆序打印" << endl;
        PrintListReversingRecur(head);
        cout << endl;
        PrintListReversingStack(head);
    }
    
    输出结果:
    1 2 3 4 
    逆序打印
    4 3 2 1 
    4 3 2 1 
    [Finished in 0.4s]
  • 相关阅读:
    委托与事件参数的简单运用
    C#消息队列专题
    项目计划流程简易描述
    cookies 客户端历史记录篇
    朋友做的VS2005插件:等号两边值互换
    SSE2指令集系列之二
    SSSE3指令集
    SSE3指令集系列
    SSE特殊指令集系列之一
    SSE2指令集系列之一
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8321181.html
Copyright © 2011-2022 走看看