經典面試題18 - 在O(1)時間刪除鏈表節點

問題:
給定鏈表的頭指針和一個節點指針,在O(1)時間刪除該節點。

解答:
主要思想是「狸貓換太子」,用下一個節點數據覆蓋要刪除的節點,然後刪除下一個節點。

代碼如下:

//O(1)時間刪除鏈表節點,從無頭單鏈表中刪除節點。
void deleteRandomNode(Node *cur)
{
    assert(cur != NULL);
    assert(cur->next != NULL);    //不能是尾節點, 尾節點行不通。
    Node* pNext = cur->next;
    cur->data = pNext->data;
    cur->next = pNext->next;
    delete pNext;
}

經典面試100題 - 持續更新中

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章