单向链表的节点定义
// 单向链表的节点定义
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;
}
}
摘抄资料:《剑指offer》
网友评论