解题思路:设置哨兵,用来表示头哨兵,目的是让链表不至于没有头结点,同时还要设置prev指针和curr指针,用来操作链表的删除。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode removeElements(ListNode head, int val) {
//判断边界条件
if(head == null){
return null;
}
//设置头哨兵
ListNode sentinel = new ListNode(0);
//哨兵的next指向头结点,哨兵并不用来做任何操作,只是保证链表有头
sentinel.next = head;
ListNode prev = sentinel;
ListNode curr = head;
while(curr!=null){
if(curr.val == val){
prev.next = curr.next;
}else{
prev = curr;
}
curr = curr.next;
}
return sentinel.next;
}
}