在O(1)時間刪除連結串列結點——面試題13《劍指offer》
阿新 • • 發佈:2019-01-03
題目:給定單向連結串列得頭指標和一個節點指標,定義一個函式在O(1)時間刪除該結點。連結串列結點與函式的定義如下:
struct ListNode { int m_nValue; ListNode* m_pNext; }; void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted) { if(!pListHead ||!pToBeDeleted) //節點不存在,則返回 return; //被刪除的不是尾節點 if(pToBeDeleted->m_pNext != NULL) { ListNode* pNext = pToBeDeleted->m_pNext; //被刪除的下一個節點 pToBeDeleted->m_nValue = pNext->m_nValue; //賦值給被刪除的節點 pToBeDeleted->m_pNext = pNext->m_pNext; delete pNext; pNext = NULL; } //僅有一個節點 else if(*pListNode == pToBeDeleted) { delete pToBeDeleted; pToBeDeleted = NULL; *pListNode = NULL; } //刪除尾節點 else { ListNode* pNode = *pListHead; while(pNode->m_pNext != pToBeDeleted)//找到最後一個節點 { pNode = pNode->m_pNext; //pNode 指向尾節點之前 } pNode->m_pNext = NULL; delete pToBeDeleted = NULL; pToBeDeleted = NULL; } }