反转链表

Posted gwzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了反转链表相关的知识,希望对你有一定的参考价值。

有两种使用方法,可以用递归和非递归:

递归代码:

TestPointer.h

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

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

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

TestPointer.cpp

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; } void TestPointer::printNode(ListNode *pNode) { while(pNode != nullptr) { cout << pNode->m_nValue << "-"; pNode = pNode->m_pNext; } cout << endl; }

非递归过程,稍后补上。

 

注意项:在链表反转后,链表尾结点需要指向nullptr

 



以上是关于反转链表的主要内容,如果未能解决你的问题,请参考以下文章

如何链表反转

反转链表

c语言,链表的反转,请写出代码,并讲解下,谢了!!!!!

代码的鲁棒性:反转链表

Offer[24] 反转链表

初级--04---链表反转----链表实现栈队列双端队列