剑指offer-面试题5:从尾到头打印链表

书上的这道题刚看到时冒出的想法就是递归打印,书上的解法还给出利用栈结构的方法,链表遍历一遍,数据保存在栈中。由于栈是后进先出,所以打印出来就是逆序的。递归本质上就是栈结构!

方法一:利用栈结构:

void PrintListReversingly(LinkedList* L)
{
    stack<LinkedList*> nodes;
    //数据入栈
    LinkedList* pNode;
    pNode = L->pNext;
    while(pNode)
    {
        nodes.push(pNode);
        pNode = pNode->pNext;
    }
    //打印
    while(!nodes.empty())
    {
        pNode = nodes.top();
        cout << pNode->value << " ";
        nodes.pop();
    }
    cout << endl;
}
方法二:递归打印,在打印当前结点之前打印出下一个结点

//如果头指针不是首结点,则跳过头指针,否则直接调用Print函数即可
void Print(LinkedList* pNode)
{
    if(pNode != NULL)
    {
        if(pNode->pNext != NULL)
            Print(pNode->pNext);
        cout << pNode->value << " ";
    }
}

void PrintListReversingly(LinkedList* L)
{
    Print(L->pNext);
}



你可能感兴趣的:(剑指offer-面试题5:从尾到头打印链表)