【C++】面试题目:从尾到头打印链表

时间:2024-04-18 21:02:27

通过《剑指offer 名企面试官精讲典型编程题》看到一道讲解链表的题目。

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

链表定义如下:

    typedef struct _NODE
    {
        T Data;
        _NODE* pNext;
    }NODE, *PNODE;

书中提到解决问题可以利用栈,“后进先出”的特点实现这种顺序,每经过一个节点的时候,把该节点放到一个栈中。
当遍历完整个链表后,再从栈顶开始逐个输出节点的值。此时输出的节点顺序就已经反转过来了。

栈实现的方式代码如下:

    void  revse_printfAll()
    {
        if (m_pHead == NULL)
        {
            return;
        }
        NODE* pTemp = m_pHead;

        // stack 实现
        stack <NODE*> nodes;
        while (pTemp!=NULL)
        {
            nodes.push(pTemp);
            pTemp = pTemp->pNext;

        }
        while (!nodes.empty())
        {
            pTemp = nodes.top();
            cout << pTemp->Data;
            nodes.pop();
        }
    }

既然可以通过栈,那也可用通过vector来实现的。所以随手查看了一下vector的用法,写出与栈实现类似的代码。

    void  revse_printfAll()
    {
        // vector实现
        printf("\n");
        vector <NODE*> nodes1;
        while (pTemp != NULL)
        {
            nodes1.push_back(pTemp);
            pTemp = pTemp->pNext;

        }
        while (!nodes1.empty())
        {
            pTemp = nodes1.back();
            cout << pTemp->Data;
            nodes1.pop_back();
        }
    }