方法一:找到待删除节点的前一个节点,直接删除
public void deleteNode(ListNode head,ListNode deletedNode){
ListNode node=head;
while(node.next!=deleteNode){
node=node.next;
}
node.next=deleteNode.next;
}
方法二:节点为最后一个节点,由于它没有后继节点,所以还是需要从头遍历删除;如果只有一个节点,直接把节点置为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;
}
}