反向打印单向链表

单向链表的反向打印,即从表尾开始到表头结束,由于是单向的我们无法得到前一个节点的指针。

一种办法是从头开始把节点压入一个栈,然后通过栈输出。

当然还有一种办法就是递归。

以下是这2种方法的代码,第一种方法运用到STL的stack。

//反转打印
void PrintListReversing(ListNode* phead)
{
    if( phead == NULL)
        return;

    std::stack<ListNode*> nodes;
    ListNode* pNode = phead;
    while(pNode  != NULL)
    {
        nodes.push(pNode);
        pNode =pNode->p_next;
    }

    while( !nodes.empty())
    {
        pNode = nodes.top();
        cout<<pNode->data<<endl;
        nodes.pop();
    }

}
//反转打印
void PrintListReversing(ListNode* phead)
{
    if( phead == NULL)
        return;

    if(phead->p_next !=NULL)
    {
        PrintListReversing(phead->p_next);
    }
    cout<<phead->data<<endl;
}

递归方法代码简化很多,很简洁,但是如果链表很长那么递归方法带来的开销将会很大。所以在数据很多时一般采用循环方式而放弃递归来提高执行效率

posted @ 2013-03-01 21:17  没离开过  阅读(139)  评论(0)    收藏  举报