本题中,我们是要移除链表的某一个节点,为了确保统一操作,我们需要使用虚拟头节点,这样我们删除节点的时候,就是把这个要删除的节点(当前节点cur)的前一个节点pre,使得pre.next指向要删除节点的下一个节点,所以就是pre.next = cur.next。
如果不是我们要删除的节点,那我们就移动pre指针,让其往后走,就是pre=cur。然后再切换当前节点的位置,cur = cur.next。
public ListNode removeElements(ListNode head, int val) {if (head == null) {return head;}// 因为删除可能涉及到头节点,所以设置dummy节点,统一操作ListNode dummy = new ListNode(-1, head);ListNode pre = dummy;ListNode cur = head;while (cur != null) {if (cur.val == val) {pre.next = cur.next;} else {pre = cur;//也可以写成pre=pre.next}cur = cur.next;}return dummy.next;
}