問題:
給定鏈表的頭指針和一個(gè)節(jié)點(diǎn)指針矿酵,在O(1)時(shí)間刪除該節(jié)點(diǎn)只嚣。
解答:
主要思想是「貍貓換太子」腻贰,用下一個(gè)節(jié)點(diǎn)數(shù)據(jù)覆蓋要?jiǎng)h除的節(jié)點(diǎn),然后刪除下一個(gè)節(jié)點(diǎn)巩搏。
代碼如下:
//O(1)時(shí)間刪除鏈表節(jié)點(diǎn)昨登,從無頭單鏈表中刪除節(jié)點(diǎn)。
void deleteRandomNode(Node *cur)
{
assert(cur != NULL);
assert(cur->next != NULL); //不能是尾節(jié)點(diǎn), 尾節(jié)點(diǎn)行不通贯底。
Node* pNext = cur->next;
cur->data = pNext->data;
cur->next = pNext->next;
delete pNext;
}