• c++ 链表基础功能实现


    #include<stack>
    
    struct ListNode 
    {
        int m_nValue;
        ListNode* m_pNext;
    };
    
    ListNode* CreateListNode(int value)
    {
        ListNode* pNode = new ListNode();
        pNode->m_nValue = value;
        pNode->m_pNext = nullptr;
        return pNode;
    }
    
    void ConnectListNodes(ListNode* pCurrent, ListNode* pNext)
    {
        if (pCurrent == nullptr)
        {
            printf("Error to connect two nodes.
    ");
            exit(1);
        }
        pCurrent->m_pNext = pNext;
    }
    
    void PrintListNodeValue(ListNode* pNode)
    {
        if (pNode == nullptr)
            printf("The node is nullptr.
    ");
        else
            printf("The value of the node is %d .
    ", pNode->m_nValue);
    }
    
    void PrintListNode(ListNode* pHead)
    {
        printf("PrintList starts.
    ");
        ListNode* pNode = pHead;
        while (pNode != nullptr)
        {
            printf("%d	", pNode->m_nValue);
            pNode = pNode->m_pNext;
        }
        printf("
    PrintList ends.
    ");
    }
    
    void DestroyList(ListNode* pHead)
    {
        ListNode* pNode = pHead;
        while (pNode != nullptr)
        {
            pHead = pHead->m_pNext;
            delete pNode;
            pNode = pHead;
        }
    }
    
    void AddToTail(ListNode**pHead, int value)
    {
        ListNode* pNew = new ListNode();
        pNew->m_nValue = value;
        pNew->m_pNext = nullptr;
        if (*pHead = nullptr)
            *pHead = pNew;
        else
        {
            ListNode* pNode = *pHead;
            while (pNode->m_pNext != nullptr)
                pNode = pNode->m_pNext;
            pNode->m_pNext = pNew;
        }
    }
    
    void RemoveNode(ListNode** pHead, int value)
    {
        if (*pHead == nullptr || pHead == nullptr)
            return;
        ListNode* pToBeDeleted = nullptr;
        if ((*pHead)->m_nValue == value)
        {
            pToBeDeleted = *pHead;
            *pHead = (*pHead)->m_pNext;
        }
        else
        {
            ListNode* pNode = *pHead;
            while (pNode->m_pNext != nullptr && pNode->m_pNext->m_nValue != value)
                pNode = pNode->m_pNext;
            if (pNode->m_pNext != nullptr && pNode->m_pNext->m_nValue == value)
            {
                pToBeDeleted = pNode->m_pNext;
                pNode->m_pNext = pNode->m_pNext->m_pNext;
            }
        }
        if (pToBeDeleted != nullptr)
        {
            delete pToBeDeleted;
            pToBeDeleted = nullptr;
        }
    }
    
    void PrintListReversingly_Iteratively(ListNode* pHead)
    {
        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	", 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	", pHead->m_nValue);
        }
    }
    
    void Test(ListNode* pHead)
    {
        PrintListNode(pHead);
        PrintListReversingly_Iteratively(pHead);
        printf("
    ");
        PrintListReversingly_Recursively(pHead);
        
    }
    
    void Test1()
    {
        printf("
    Test1 begins.
    ");
        ListNode* pNode1 = CreateListNode(1);
        ListNode* pNode2 = CreateListNode(2);
        ListNode* pNode3 = CreateListNode(3);
        ListNode* pNode4 = CreateListNode(4);
        ListNode* pNode5 = CreateListNode(5);
    
        ConnectListNodes(pNode1, pNode2);
        ConnectListNodes(pNode2, pNode3);
        ConnectListNodes(pNode3, pNode4);
        ConnectListNodes(pNode4, pNode5);
    
        Test(pNode1);
        DestroyList(pNode1);
    }
    
    int main(int argc, char* argv[])
    {
        Test1();
        getchar();
    }

  • 相关阅读:
    11.11 ntsysv:管理开机服务
    11.13 ethtool:查询网卡参数
    11.14 mii-tool:管理网络接口的状态
    11.15 dmidecode:查询系统硬件信息
    11.16-18 lsci、ipcs、ipcrm:清除ipc相关信息
    Devops 导论
    * SPOJ PGCD Primes in GCD Table (需要自己推线性筛函数,好题)
    SPOJ
    HDU 1695 莫比乌斯反演
    HDU 1800 hash 找出现最多次数的字符串的次数
  • 原文地址:https://www.cnblogs.com/fourmi/p/9739452.html
Copyright © 2020-2023  润新知