C++ 链表

线性表(顺序表)有两种存储方式:链式存储和顺式存储,顺式存储如数组,其内存连续分配,且是静态分配。链式存储,内存是不连续的,且是动态分配。前一个元素存储数据,后一个元素存储指向下一个节点的指针。

《C++ 链表》

如图所示为单向链表。

链表结构:

typedef LinkNode
{
    int m_nValue;      //节点中存储的值
    LinkNode* m_pNext; //节点存储的指针,指向链表的下一个节点
};

在链表的结尾处加入一个节点(注意第一个参数,定义了一个指向指针的指针,因为当我们建立一个新的链表时,首节点的第一个元素就是头指针)。

void AddToTail(ListNode**pHead,int value)
{
    //首先创建这个要插入的节点,节点需要包括数据和指向空的指针(在节点末尾处指针为nullptr)
    LinkNode* pNew;
    pNew->m_nValue=value;
    pNew->m_pNext=nullptr;
    //然后判断该链表的首节点是否为空
    if(*pHead->m_pNext==nullptr)  //若首节点没有下一个指向,则表示首节点即为尾节点,将首节点的下 
                                  //一个指针指向新建的节点。
        *pHead=pNew;
    else
        {
            LinkNode* pNode=*pHead;           //如果首节点不为空,则往下找到尾节点,尾节点的指
            while(pNode->m_pNext!=nullptr)    //针为nullptr,将尾结点的指针指向pNext。
            {
                pNode=pNode->m_pNext;
            }   
                pNode->m_pNext=pNext;          
            
        }
    
}

删除链表中存储某个值的节点

void RemoveNode(LinkNode**pHead,int value)
{
    //首先判断首节点是否为空
    if(*pHead=nullptr||pHead=nullptr)
        return;
    LinkNode*pToBeDelete=nullptr;
    //判断首节点是否为要删除的元素
    if((*pHead)->m_nValue==value)
        {
            pToBeDelete=*pHead;            
            *pHead=(*pHead)->m_pNext;
        }
    else
        {
            LinkNode *pNode=*pHead;
            while(pNode->m_pNext!=nullptr&&pNode->m_nValue!=value)
            pNode->m_Next=pNode->m_pNext-> ;
            
            if(pNode->m_pNext!=nullptr&&pNode->m_nValue==value)
            {
                pToBeDeleted=pNode->m_pNext;
                pNode->m_Next=pNode->m_pNext->m_pNext;
            }
            
        }
     if(pToBeDeleted!=nullptr)
        {
            delete pToBeDeleted;
            pToBeDeleted=nullptr;
        }
              
}

 

    原文作者:summerlq
    原文地址: https://blog.csdn.net/summerlq/article/details/81331735
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞