美文网首页
5 从尾到头打印链表

5 从尾到头打印链表

作者: WalkZeRo | 来源:发表于2016-06-26 22:11 被阅读0次

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

    #include <stdio.h>
    #include <stack>
    #include "list.h"
    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_Recursively(pHead->m_pNext);
            }
    
            printf("%d\t", pHead->m_nValue);
        }
    }
    
    void Test(ListNode* pHead)
    {
        PrintList(pHead);
        PrintListReversingly_Iteratively(pHead);
        printf("\n");
        PrintListReversingly_Recursively(pHead);
    }
    
    // 1->2->3->4->5
    void Test1()
    {
        printf("\nTest1 begins.\n");
    
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode2 = CreateListNode(2);
        ListNode* pNode3 = CreateListNode(3);
        ListNode* pNode4 = CreateListNode(4);
        ListNode* pNode5 = CreateListNode(5);
    
        ConnectListNodes(pNode1, pNode2);
        ConnectListNodes(pNode2, pNode3);
        ConnectListNodes(pNode3, pNode4);
        ConnectListNodes(pNode4, pNode5);
    
        Test(pNode1);
    
        DestroyList(pNode1);
    }
    
    // 只有一个结点的链表: 1
    void Test2()
    {
        printf("\nTest2 begins.\n");
    
        ListNode* pNode1 = CreateListNode(1);
    
        Test(pNode1);
    
        DestroyList(pNode1);
    }
    
    // 空链表
    void Test3()
    {
        printf("\nTest3 begins.\n");
    
        Test(NULL);
    }
    
    int main(void)
    {
        Test1();
        Test2();
        Test3();
    
        return 0;
    }
    
    

    结果

    QQ截图20160626220946.png

    相关文章

      网友评论

          本文标题:5 从尾到头打印链表

          本文链接:https://www.haomeiwen.com/subject/ubhzdttx.html