class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){
return null;
}
ListNode pre=head;
ListNode cur=head.next;
while(cur!=null){
if(cur.val==val){
pre.next=cur.next;
cur=cur.next;
}
else{
pre=cur;
cur=cur.next;
}
}
if(head.val==val){
head=head.next;
}
return head;
}
}
解题思路:
首先找到特殊情况,比如链表为空,只有一个头节点。
具体实现方法:设置一个pre前驱节点和一个cur 临时节点。使用while循环,条件为cur!=null(若等于null,循环结束,也意味着找遍了链表)。在while循环内,判断cur的val与所要删除的val是否相等。若相等,则令cur的前一个节点pre的next等于cur.next;则实现了对待删除节点的操作,再领cur.next,以便下一次循环的操作;若不相等,则使得pre=cur,cur=cur.next。