[Offer prove safety study questions surface [13]: Delete node list in O (1) time]

https://www.cnblogs.com/edisonchou/p/4765163.html

https://blog.csdn.net/derrantcm/article/details/45529213

 

typedef struct node
{
    int m_nValue;
    struct node* m_pNext;
}ListNode;


void delNode(ListNode* pHead, ListNode* pDel) {
    if (pHead == NULL || pDel == NULL) {
        return;
    }
    if (pDel->m_pNext!=NULL) {
        //被删除的不是最后一个
        ListNode *temp = pDel->m_pNext;
        pDel->m_nValue = temp->m_nValue;
        pDel->m_pNext = temp->m_pNext;
    }
    else if (pHead == pDel) {
        //是最后一个且头尾相等,那么列表就一个元素
        pHead = NULL;
    }
    else  {
        // 删除的是最后一个,且链表多于两个元素
        ListNode *cur = pHead->m_pNext;
        ListNode *pre = pHead;
        while (cur != pDel) {
            pre = cur;
            cur = cur->m_pNext;
        }
        pre->m_pNext = NULL;
    }
}


    pHead = (ListNode*)malloc(sizeof(ListNode));
    pNode1 = (ListNode*)malloc(sizeof(ListNode));
    pNode2 = (ListNode*)malloc(sizeof(ListNode));
    pNode3 = (ListNode*)malloc(sizeof(ListNode));
    
    pHead->m_nValue = 0;
    pHead->m_pNext  = pNode1;
    
    pNode1->m_nValue = 1;
    pNode1->m_pNext  = pNode2;
    
    pNode2->m_nValue = 2;
    pNode2->m_pNext  = pNode3;
    
    pNode3->m_nValue = 3;
    pNode3->m_pNext  = NULL;
    
    delNode(pHead,pHead);

 

Published 81 original articles · won praise 68 · views 80000 +

Guess you like

Origin blog.csdn.net/li198847/article/details/104427320