題目描述:
給定一個鏈表的頭指針和要刪除的結點指針,要求用O(1)時間複雜度刪除結點。
思路:
- 如果刪除的結點是尾結點,先找到尾結點的前驅節點,然後刪除;
- 如果刪除的結點不是尾結點,將要刪除的結點的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;
}
(完)