zoukankan      html  css  js  c++  java
  • Create a Listlink

    #ifndef List_h__
    #define List_h__
    
    #include <stdio.h>
    
    struct ListNode
    {
        int value;
        ListNode* pNext;
        ListNode(int n) :value(n), pNext(nullptr){}
    };
    
    class ListSolution
    {
    public:
        ListSolution& AddToTail(ListNode** ppHead, int value);
        ListSolution& RemoveNode(ListNode** ppHead, int value);
        ListSolution& RemoveAll(ListNode** ppHead);
        void Print(ListNode* pHead);
    };
    
    #endif // List_h__
    #include "List.h"
    
    ListSolution& ListSolution::AddToTail(ListNode** ppHead, int value)
    {
        if (!ppHead)
        {
            return *this;
        }
    
        ListNode* pNewNode = new ListNode(value);
    
        if (nullptr == *ppHead)
        {
            *ppHead = pNewNode;
        }
        else
        {
            ListNode* pCurNode = *ppHead;
            while (pCurNode->pNext)
            {
                pCurNode = pCurNode->pNext;
            }
    
            pCurNode->pNext = pNewNode;
        }
    
        return *this;
    }
    
    ListSolution& ListSolution::RemoveNode(ListNode** ppHead, int value)
    {
        if (nullptr == ppHead
            || nullptr == *ppHead)
        {
            return *this;
        }
    
        ListNode* pDelNode = nullptr;
        if (value == (*ppHead)->value)
        {
            pDelNode = *ppHead;
            *ppHead = (*ppHead)->pNext;
        }
        else
        {
            ListNode* pCurNode = (*ppHead);
            while (pCurNode->pNext && pCurNode->pNext->value != value)
            {
                pCurNode = pCurNode->pNext;
            }
    
            if (nullptr != pCurNode->pNext && pCurNode->pNext->value == value)
            {
                pDelNode = pCurNode->pNext;
                pCurNode->pNext = pCurNode->pNext->pNext;
            }
        }
        
        if (pDelNode)
        {
            printf("remove %d
    ", pDelNode->value);
            delete pDelNode;
            pDelNode = nullptr;
        }
    
        return *this;
    }
    
    ListSolution& ListSolution::RemoveAll(ListNode** ppHead)
    {
        if (nullptr == ppHead
            || nullptr == *ppHead)
        {
            return *this;
        }
    
        ListNode* pCurNode = *ppHead;
        ListNode* pDelNode = nullptr;
        while (pCurNode->pNext)
        {
            pDelNode = pCurNode->pNext;
            pCurNode->pNext = pCurNode->pNext->pNext;
    
            printf("remove %d
    ", pDelNode->value);
            delete pDelNode;
            pDelNode = nullptr;
        }
    
        printf("remove %d
    ", (*ppHead)->value);
        delete *ppHead;
        *ppHead = nullptr;
    
        return *this;
    }
    
    void ListSolution::Print(ListNode* pHead)
    {
        ListNode* pCurNode = pHead;
        while (pCurNode)
        {
            printf(" %d", pCurNode->value);
            pCurNode = pCurNode->pNext;
        }
    
        printf("
    ");
    }
    #include "List.h"
    
    int main()
    {
        ListSolution s;
        ListNode* pHead = nullptr;
    
        s.AddToTail(&pHead, 1);
        s.AddToTail(&pHead, 2);
        s.AddToTail(&pHead, 3);
        s.AddToTail(&pHead, 4);
        s.AddToTail(&pHead, 5);
        s.AddToTail(&pHead, 6);
        s.Print(pHead);
        s.RemoveNode(&pHead, 3);
        s.RemoveNode(&pHead, 1);
        s.RemoveNode(&pHead, 2);
        s.Print(pHead);
        s.RemoveAll(&pHead);
    
        s.AddToTail(nullptr, 1);
        s.Print(nullptr);
        s.RemoveNode(nullptr, 1);
        s.RemoveAll(nullptr);
    
        if (nullptr == pHead)
        {
            printf("pHead == nullptr
    ");
        }
    
        return 0;
    }
  • 相关阅读:
    监视和调整硬件性能
    ASP.NET MVC三个重要的描述对象:ActionDescriptor
    REST in Practice
    软硬件错误的排查之道
    OMCS 多媒体连接系统
    逻辑层 vs 物理层
    深入浅出裸测之道单元测试的单元化
    简单的网络爬虫实现
    WCF返回JSON与传入JSON(普通参数或对象)
    .NET程序员的一个礼物——TypeMonster
  • 原文地址:https://www.cnblogs.com/kernel0815/p/5149737.html
Copyright © 2011-2022 走看看