問題:
給定鏈表的頭指針和一個節點指針,在O(1)平均時間刪除該節點。
public class DeleteListNode {
public static void deleteNode(ListNode head,ListNode target){
//如果參數爲空
if(head==null||target==null){
return;
}
if(head.next==null){
//如果只有一個頭結點
target = null;
head = null;
}else if(target.next==null){
//如果target爲最後一個結點,則需遍歷
ListNode cur = head;
while(cur.next!=target){
cur = cur.next;
}
cur.next = null;
target = null;
System.out.println("到這了1");
}else{
//如果target不是最後一個結點,則可在O(1)時間內刪除結點
//思路:先將要刪的結點的後置結點複製到該節點,然後再令其後置結點成爲next的next
ListNode pNext = target.next;
target.val = pNext.val;
target.next = pNext.next;
}
}
public static void main(String[] args){
ListNode a = new ListNode(1);
ListNode b = new ListNode(2);
ListNode c = new ListNode(3);
ListNode d = new ListNode(4);
a.next = b;
b.next = c;
c.next = d;
deleteNode(a, c);
while (a!=null) {
System.out.println(a.val);
a=a.next;
}
}
}