劍指Offer之O(1)刪除鏈表結點

題目描述:

給定一個鏈表的頭指針和要刪除的結點指針,要求用O(1)時間複雜度刪除結點。


思路:
  1. 如果刪除的結點是尾結點,先找到尾結點的前驅節點,然後刪除;
  2. 如果刪除的結點不是尾結點,將要刪除的結點的val值賦值爲後繼結點的val值,刪除後繼結點即可。

參考代碼:
public static ListNode deleteNode(ListNode head, ListNode toBeDeleted) {
   if(head == null || toBeDeleted == null)return head;
   if(head == toBeDeleted)return head.next;
   if(toBeDeleted.next == null){//說明是尾結點
      //找到前驅節點
      ListNode p = head;
      while(p.next != null && p.next != toBeDeleted){
          p = p.next;
      }
      if(p.next == toBeDeleted)p.next = null;
   }
   else{//不是尾結點
      toBeDeleted.val = toBeDeleted.next.val;
      toBeDeleted.next = toBeDeleted.next.next;
   }
   return head;
}

(完)

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