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

从尾到头打印单链表

时间:2014-11-23 16:07:36      阅读:243      评论:0      收藏:0      [点我收藏+]

标签:链表反向输出;c++;递归

题目:从尾到头打印链表。输入一个单链表的头结点,从尾到头反过来打印出每个结点的值。链表结点定义如下:

struct ListNode{
    int m_nValue;
    ListNode* m_pNext;
};

分析:考虑栈操作的类似性,可以建立堆栈然后输出。实现代码如下:


void PrintListReversingly_Iteratively(ListNode* pHead){
    std::stack<ListNode*>=nodes;
    
    ListNode* pNode=pHead;
    while(pNode!=NULL){
        nodes.push(pNode);
        pNode=pNode->m_pNext;
    }
    while(!nodes.empty()){
        pNode=nodes.top();
        printf("%d\t",pNode->m_nValue);
        nodes.pop();
    }
}

既然想到用堆栈,就可以想到递归在本质上也是堆栈结构,于是我们可以用递归来实现。要实现反过来输出链表,我们每访问到一个节点的时候,先递归输出她后面的结点,在输出该节点自身就可以了。实现代码如下:

void PrintListReversingly_Recursively(ListNode* pHead){
    if(pHead!=NULL){
        if(pHead->m_pNext!=NULL){
            PrintListReversingly_Recursingly(pHead->m_pNext);
        }
        printf("%d\t",pHead->m_nValue);
    }
}

递归的方法有个问题:当链表非常长时,就会导致函数调用的层级很深,从而有可能导致函数调用的栈溢出。显式的栈基于循环实现的代码的鲁棒性要好一些。




本文出自 “仙路千叠惊尘梦” 博客,请务必保留此出处http://secondscript.blog.51cto.com/9370042/1581618

从尾到头打印单链表

标签:链表反向输出;c++;递归

原文地址:http://secondscript.blog.51cto.com/9370042/1581618

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