从尾到头打印链表

2021-10-28  本文已影响0人  gaookey

单向链表的节点定义

// 单向链表的节点定义
struct ListNode {
    int m_nValue;
    ListNode* m_pNext;
};

栈实现

// 栈实现
void PrintListReversingly_Iteratively(ListNode* pHead) {
    // #include <stack>
    std::stack<ListNode*>nodes;
    
    ListNode* pNode = pHead;
    while (pNode != nullptr) {
        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 != nullptr) {
        if (pHead->m_pNext != nullptr) {
            PrintListReversingly_Recursively(pHead->m_pNext);
        }
        printf("%d\t", pHead->m_nValue);
    }
}

摘抄资料:《剑指offer》

上一篇下一篇

猜你喜欢

热点阅读