本题分为两个步骤:定位节点位置,修改前一个节点到当前节点的下一个
特例处理: 当应删除头节点 head
时,直接返回 head.next
即可。
public ListNode deleteNode(ListNode head, int val) {
//删除头结点,返回head.next
if(head.val == val){
return head.next;
}
ListNode pre = head;
ListNode curr = head.next;
//遍历条件:当前节点不为空,并且当前节点的值不是要删除的值,
while(curr != null && curr.val != val){
pre = curr;
curr = curr.next;
}
//跳出循环时,如果当前节点不为空,则说明当前节点的值就是要删除的值
//把当前节点的前一个节点pre的next赋给当前节点的下一个节点
if(curr != null){
pre.next = curr.next;
}
return head;
}