• 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]
  • 相关阅读:
    检查两个单链表是否有交点
    检查链表中是否有环
    [转]根据二叉树的先序、中序遍历结果重建二叉树
    背包问题
    硬币问题
    部分和问题
    斐波那契计算
    最大公因数和最小共倍数
    计算一年中的第几天
    利用递归反向输出字符串
  • 原文地址:https://www.cnblogs.com/yjbjingcha/p/8321181.html
Copyright © 2020-2023  润新知