一、题目
【题目描述】
给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点。
二、剖析
1.画图:
如何删除?
1.先找到22的位置在哪?
所以我们在这里定义一个cur,表示当前需要删除的数据。
2.我们的链表的头不能随意移动,定义一个prev=head,表示头节点位置。
3.判断cur中的数据是不是我们需要删除的,如果不是则移动。
4.如果相等,则删除,这里是循环判断
5.当遍历完整个链表后,循环结束。
6.最后,还有一个头结点,我们再次判断头结点元素。
这里为什么要把头结点放到最后才进行判断呢?
class Solution {
public ListNode removeElements(ListNode head, int val) {
if(head==null){
return null;
}
ListNode prev=head;
ListNode cur=head.next;
while(cur!=null){
if(cur.val==val){
prev.next=cur.next;
cur=cur.next;
}else{
prev=cur;
cur=cur.next;
}
}
if(head.val==val){
head=head.next;
}
return head;
}
}