题目五:从尾到头打印链表

//////////////////////////////////////////////////////////////////////////////////////////////

// 8.题目五:从尾到头打印链表

// 方法一:时间复杂度O(n),空间复杂度O(n)
template <typename TYPE>
void ReversePrintList1(ListNode<TYPE>* pNode)
{
    assert(NULL != pNode);

    stack<ListNode<TYPE>*> stStack;
    while (pNode)
    {
        stStack.push(pNode);
        pNode = pNode->m_pNextNode;
    }

    cout << "链表逆序打印: " << endl;
    while (!stStack.empty())
    {
        ListNode<TYPE>* pTmpNode = stStack.top();
        printf("%02d -> ", pTmpNode->m_stData);
        stStack.pop();
    }

    putchar(10);

}

// 方法二:递归实现(递归实现也是类似栈实现)
// 时间复杂度O(n), 空间复杂度O(n)
// 注意:如果链表非常长,会导致函数调用层级很深,从而导致函数调用栈溢出!!!
template <typename TYPE>
void ReversePrintLisHEAP_TYPE(ListNode<TYPE>* pNode)
{
    if (!pNode)
    {
        return;
    }

    ReversePrintLisHEAP_TYPE(pNode->m_pNextNode);

    printf("%02d -> ", pNode->m_stData);
}

void ReversePrintListTestFunc()
{
    cout << "\n\n --------------- ReversePrintListTestFunc Start -------------->" << endl;
    const int MAX_LIST_NODE_COUNT = 10;
    int aiArray[MAX_LIST_NODE_COUNT] = {0};

    INITIALIZE_ARRAY(aiArray, MAX_LIST_NODE_COUNT);
    TRAVERSAL_ARRAY(aiArray, MAX_LIST_NODE_COUNT);

    CSingleList<int>* pList = new CSingleList<int>();
    if (!pList)
    {
        return;
    }

    for (int i = 0; i < MAX_LIST_NODE_COUNT; i++)
    {
        pList->Insert(aiArray[i]);
    }

    pList->Traversal();

    ReversePrintList1(pList->GetHeadNode());

    cout << "递归实现链表逆序打印: " << endl;
    ReversePrintLisHEAP_TYPE(pList->GetHeadNode());
    putchar(10);

    delete pList;
    pList = NULL;

    cout << "\n\n --------------- ReversePrintListTestFunc End -------------->" << endl;

}

原文地址:https://www.cnblogs.com/yzdai/p/11258607.html

时间: 2024-11-05 20:49:35

题目五:从尾到头打印链表的相关文章

《剑指offer》第五题(重要!从尾到头打印链表)

文件main.cpp // 从尾到头打印链表 // 题目:输入一个链表的头结点,从尾到头反过来打印出每个结点的值. #include <iostream> #include <stack> #include "List.h" using namespace std; void PrintListReversingly_Iteratively(ListNode* pHead)//解法一:使用栈 { stack<ListNode*> nodes;//定义

《剑指Offer》题目——从尾到头打印链表

题目描述:输入一个链表,从尾到头打印链表每个节点的值. 题目分析:用栈:Java用Stack不如用Deque接口,原因可以见链接:http://stackoverflow.com/questions/12524826/why-should-i-use-deque-over-stack public class ReverseList { class ListNode{ int val; ListNode next = null; ListNode(int val){ this.val = val

九度oj题目1511:从尾到头打印链表

题目1511:从尾到头打印链表 时间限制:1 秒 内存限制:128 兆 特殊判题:否 提交:6010 解决:1805 题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例.每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 样例输入: 1 2 3 4 5 -1 样例输出

剑指Offers 题目1511:从尾到头打印链表

题目1511:从尾到头打印链表 题解报告:方法一.链表创建,头插法,方法二.运用栈,注意栈可能溢出~! #include <iostream> #include <stack> #include <cstdio> using namespace std; // stack int main() { int num; stack<int> List; while(scanf("%d", &num) && num !=

从尾到头打印链表

参与人数:4164时间限制:1秒空间限制:32768K 通过比例:16.80% 最佳记录:0 ms|0K(来自  黄昏的足迹) 题目描述 输入一个链表,从尾到头打印链表每个节点的值. 提交时间:2015-09-25 语言:C++ 运行时间:0ms 占用内存:8552K 状态:答案正确 /* 遍历一次链表,每遍历到一个结点,就将结点的值插入到vecotr的开始. */ /** * struct ListNode { * int val; * struct ListNode *next; * Lis

5-从尾到头打印链表

题目描述:http://ac.jobdu.com/problem.php?pid=1511 输入一个链表,从尾到头打印链表每个节点的值. 输入: 每个输入文件仅包含一组测试样例. 每一组测试案例包含多行,每行一个大于0的整数,代表一个链表的节点.第一行是链表第一个节点的值,依次类推.当输入到-1时代表链表输入完毕.-1本身不属于链表. 输出: 对应每个测试案例,以从尾到头的顺序输出链表每个节点的值,每个值占一行. 逆序打印链表,我们遍历链表只能从头到尾,现在要求我们从尾到头.后进先出,可以想到用

《剑指offer》— JavaScript(3)从尾到头打印链表

从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值. 实现代码 /*function ListNode(x){ this.val = x; this.next = null; }*/ function printListFromTailToHead(head) { var res=[]; while(head){ res.unshift(head.val); head=head.next; } return res; } 相关知识 创建一个链表,并实现插入,删除,添加的方法

从尾到头打印链表-剑指Offer

从尾到头打印链表 题目描述 输入一个链表,从尾到头打印链表每个节点的值 输入描述 输入为链表的表头 输出描述 输出为需要打印的“新链表”的表头 思路 单向链表是从头到尾指向的,从尾到头打印符合“后进先出”,所以我们使用栈结构Stack 代码 import java.util.ArrayList; import java.util.Stack; public class Solution03 { public ArrayList<Integer> printListFromTailToHead(

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

题目描述: 输入一个链表,从尾到头打印链表每个节点的值. 输入描述: 输入为链表的表头 输出描述: 输出为需要打印的"新链表"的表头 用栈处理: /** *    public class ListNode { *        int val; *        ListNode next = null; * *        ListNode(int val) { *            this.val = val; *        } *    } * */ import