問題:
給定鏈表的頭指針和一個節點指針,在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;
}