1. 程式人生 > >[劍指offer]Q13:O(1)時間刪除鏈表的結點

[劍指offer]Q13:O(1)時間刪除鏈表的結點

art tracking ipp 後繼 鏈表 內容 last pop _id

通常我們所說的刪除鏈表的某個結點,是徹底刪除該結點的空間。而要這麽做就必須知道其前驅結點。這裏的想法是,鏈表中存儲的val是同類型的,僅僅要將該結點的val內容刪除就能夠了。

那麽就能夠用該結點的後繼結點的值覆蓋當前結點,然後刪除其後繼結點,而對於其後繼結點而言,該結點就是前驅。

這裏僅僅須要考慮當前刪除的結點是否為last node 就能夠了。至於是否是頭結點。這樣的情況是能夠歸為同一種情況的。僅僅是參數要稍作改動。

void delNode(ListNode **head, ListNode **toDel)
{
	if(*toDel == NULL || head == NULL || *head == NULL)
		return;
	// toDel is the last node
	if( (*toDel)->next == NULL){
		// notice: order of delete and assi null
		delete *toDel;
		*toDel = NULL;
		return;
	}
	// toDel is not last node
	else{
		ListNode *beDel = (*toDel)->next;
		(*toDel)->val = beDel->val;
		(*toDel)->next = beDel->next;
		delete beDel;
		beDel = NULL;
	}
}




[劍指offer]Q13:O(1)時間刪除鏈表的結點