解决思路
虚拟头结点
对于这样的链表,删除掉3
cur指针遍历链表,一旦遍历掉待删除元素的前一个,即cur.next 指向 3
记录下待删除的节点。然后将cur的next指针指向待删除节点的next节点
然后删除delNode
该逻辑对于删除最后一个元素依然适用
问题在于对于删除第一个元素是不使用的
第一个元素无法找到前一个指针,故无法删除
**设立一个虚拟的头结点 dummyHead
初始化的时候dummyHead的next指针指向真正的head

此时cur指针初始化的时候可以指向dummyHead
这样做之后,原来的头结点就有了前一个节点
此时从虚拟的dummyHead出发,对于链表中的所有头结点,删除的过程就可以统一了
最终返回dummyHead.next
public ListNode removeElements(ListNode head, int val) {//这里的dummyHead初始化的值并不重要,因为并不会被访问到ListNode dummyHead = new ListNode(0);//让dummyHead的next指向headdummyHead.next = head;ListNode cur = dummyHead;while(cur.next!=null){if(cur.next.val==val)cur.next = cur.next.next;elsecur = cur.next;}//最后放回的是虚拟头节点的nextreturn dummyHead.next;}
