[劍指offer]Q13:O(1)時間刪除鏈表的結點
阿新 • • 發佈:2017-06-30
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)時間刪除鏈表的結點