链表的插入和删除
作者:互联网
/* * 往链表的末尾插入一个节点和在链表中查找某个节点并删除 */ #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仍然时一个空指针。 */
标签:ListNode,删除,pNode,nullptr,链表,插入,pHead,pNext 来源: https://www.cnblogs.com/xcxfury001blogs/p/15531841.html