【链表】反转

链表反转的递归实现
本文介绍了一种使用递归方法实现链表反转的技术。通过递归调用,该方法能够有效地完成链表节点顺序的反转。需要注意的是,递归实现虽然简洁易懂,但在效率上可能不如迭代方法。

代码如下:

TestPointer.h

struct ListNode
{
    int m_nValue;
    ListNode *m_pNext;
};

    
class TestPointer
{
public:
    ListNode* reverseListNode(ListNode *pHead);

private: ListNode* reverseCode(ListNode *pNode); };

TestPointer.cpp

ListNode* TestPointer::reverseListNode(ListNode *pHead)
{
    if (pHead == nullptr)
        return nullptr;

    ListNode *pReverseHead = nullptr;
    pReverseHead = reverseCode(pHead);
    return pReverseHead;
}

ListNode * TestPointer::reverseCode(ListNode *pNode)
{
    if (pNode->m_pNext == nullptr)
        return pNode;

    ListNode *pReverseHead= reverseCode(pNode->m_pNext);
    ListNode *pCurNode= pReverseHead;
    while(pCurNode->m_pNext != nullptr)
    {
        pCurNode = pCurNode->m_pNext;
    }

    pCurNode->m_pNext = pNode;
    pNode->m_pNext = nullptr;

    return pReverseHead;

}

 

留意:在链表反转时,链表尾结点需要指向nullptr

评点:虽然递归实现的可读性好,但是效率比较差

扩展:可以考虑不用递归实现反转链表的功能

 

转载于:https://www.cnblogs.com/gwzz/p/9238475.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值