方法一:找到待刪除節點的前一個節點,直接刪除
public void deleteNode(ListNode head,ListNode deletedNode){
ListNode node=head;
while(node.next!=deleteNode){
node=node.next;
}
node.next=deleteNode.next;
}
Paste_Image.png
方法二:節點為最后一個節點,由于它沒有后繼節點,所以還是需要從頭遍歷刪除;如果只有一個節點,直接把節點置為null;如果有多個節點,且不為最后一個節點,先把待刪除節點i下一個節點j的值,賦值給i,再讓i指向j的下一個節點;
public void deleteNode(ListNode head,ListNode deletedNode){
if(head==null||deleteNode==null)
return;
if(deleteNode.next!=null){
//不是尾部節點
deleteNode.val=deleteNode.next.val;//把j的值賦給i
deleteNode.next=deleteNode.next.next//i指向j的下一個節點
}else if(head==deleteNode){
//單個節點
head==deleteNode=null;
}else{
//尾部節點
ListNode node=head;
while(node.next!=deleteNode){
node=node.next;
}
node.next=null;
}
}