单向链表 添加、删除节点

2021-10-28  本文已影响0人  gaookey

单向链表的节点定义

// 单向链表的节点定义
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》

上一篇 下一篇

猜你喜欢

热点阅读