码迷,mamicode.com
首页 > 其他好文 > 详细

5-从尾到头打印链表

时间:2015-07-25 23:05:47      阅读:154      评论:0      收藏:0      [点我收藏+]

标签:链表      

题目描述: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]

版权声明:本文为博主原创文章,未经博主允许不得转载。

5-从尾到头打印链表

标签:链表      

原文地址:http://blog.csdn.net/quzhongxin/article/details/47060373

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!