佛山网站建设十年乐云seo,邯郸做移动网站费用,安徽网站建设推荐-晨飞网络,短视频素材下载网站 免费线性表#xff08;顺序表#xff09;有两种存储方式#xff1a;链式存储和顺式存储#xff0c;顺式存储如数组#xff0c;其内存连续分配#xff0c;且是静态分配。链式存储#xff0c;内存是不连续的#xff0c;且是动态分配。前一个元素存储数据#xff0c;后一个元…线性表顺序表有两种存储方式链式存储和顺式存储顺式存储如数组其内存连续分配且是静态分配。链式存储内存是不连续的且是动态分配。前一个元素存储数据后一个元素存储指向下一个节点的指针。 如图所示为单向链表。
链表结构
typedef LinkNode
{int m_nValue; //节点中存储的值LinkNode* m_pNext; //节点存储的指针指向链表的下一个节点
};
在链表的结尾处加入一个节点(注意第一个参数定义了一个指向指针的指针因为当我们建立一个新的链表时首节点的第一个元素就是头指针)。
void AddToTail(ListNode**pHead,int value)
{//首先创建这个要插入的节点,节点需要包括数据和指向空的指针在节点末尾处指针为nullptrLinkNode* pNew;pNew-m_nValuevalue;pNew-m_pNextnullptr;//然后判断该链表的首节点是否为空if(*pHead-m_pNextnullptr) //若首节点没有下一个指向则表示首节点即为尾节点将首节点的下 //一个指针指向新建的节点。*pHeadpNew;else{LinkNode* pNode*pHead; //如果首节点不为空则往下找到尾节点尾节点的指while(pNode-m_pNext!nullptr) //针为nullptr将尾结点的指针指向pNext。{pNodepNode-m_pNext;} pNode-m_pNextpNext; }}
删除链表中存储某个值的节点
void RemoveNode(LinkNode**pHead,int value)
{//首先判断首节点是否为空if(*pHeadnullptr||pHeadnullptr)return;LinkNode*pToBeDeletenullptr;//判断首节点是否为要删除的元素if((*pHead)-m_nValuevalue){pToBeDelete*pHead; *pHead(*pHead)-m_pNext;}else{LinkNode *pNode*pHead;while(pNode-m_pNext!nullptrpNode-m_nValue!value)pNode-m_NextpNode-m_pNext- ;if(pNode-m_pNext!nullptrpNode-m_nValuevalue){pToBeDeletedpNode-m_pNext;pNode-m_NextpNode-m_pNext-m_pNext;}}if(pToBeDeleted!nullptr){delete pToBeDeleted;pToBeDeletednullptr;}}