注意判断链表的第一个结点(也就是head结点)是否为目标结点
和链表最后一个结点(因为用的是但指针,无法判断最后一个结点),需要在跳出循环后单独判断
public class Offer18 {
public ListNode deleteNode(ListNode head, int val) {
if (head == null) return null;
/** 找到目标结点的前一个结点temp*/
ListNode temp = head;
while (temp.next != null){//当next为null时,结束循环
if (temp.val == val) return head = temp.next;//如果当前结点(头结点)为目标结点,就让下一个结点为头结点并返回
if (temp.next.val == val) {//如果该结点的下一个结点为目标结点,就temp.next = temp.next.next;
temp.next = temp.next.next;
return head;
}
temp = temp.next;
}
if (temp.val == val) temp = null;//如果最后一个结点为目标结点,那么就让该结点删掉, temp=null
return head;
}
}
class ListNode {
int val;
ListNode next;
ListNode(int x) { val = x; }
}