zoukankan      html  css  js  c++  java
  • 【链表】反转

    代码如下:

    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

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

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

  • 相关阅读:
    闭关
    我现在很好
    asp.net看不明白怎么办?
    中秋节
    今天很开心
    偶尔伤感
    现在是10月4日了!
    2006的最后一天
    十多天都不写博客了
    呵呵  最近很忙  但是很充实!
  • 原文地址:https://www.cnblogs.com/gwzz/p/9238475.html
Copyright © 2011-2022 走看看