链表的插入和删除
/*
* 往链表的末尾插入一个节点和在链表中查找某个节点并删除
*/
#include<iostream>
using namespace std;
struct ListNode
{
int m_nValue;
ListNode* m_pNext;
};
//往一个链表的尾部添加一个节点
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;
}
}
int main()
{
ListNode* pList = nullptr;
AddToTail(&pList, 1);
AddToTail(&pList, 2);
RemoveNode(&pList, 1);
RemoveNode(&pList, 2);
return 0;
}
/*
* 我们要特别注意函数的第一个参数pHead是一个指向指针的指针。当我们向一个空链表中
* 插入一个节点的时候,新插入的节点就是链表的头指针。由于此时会改动头指针,因此必须
* 把pHead参数设为指向指针的指针,否则出了这个函数pHead仍然时一个空指针。
*/
posted on 2021-11-10 08:14 xcxfury001 阅读(57) 评论(0) 收藏 举报
浙公网安备 33010602011771号