💨 文章前提:本题为力扣题库链表题目----编号203
📌 文章目录:
题目:👇
1️⃣ 题目解析:
我们看到题目需要删除链表中等于给定值 val 的所有节点,注意这里删除的是所有结点,既然涉及到
删除元素,那么一定需要有一个前驱 prev 保存现有的结点位置,一个 cur 去遍历链表找需要删除的结
点,具体如何用代码实现,下面展示:👇
2️⃣ 代码实现:
步骤一、定义一个删除元素的方法:👇
public ListNode removeElements(ListNode head, int val)
☝️ 参数传入链表的头,以及删除的数值 val
步骤二、判断链表是不是空,如果是空,无法进行删除操作,直接返回空对象,程序结束 👇
if (head == null){
return null;
}
步骤三、定义一个前驱 prev 和一个 cur 去进行遍历链表,这里 prev 目前是 cur 的前驱,所以这里把 head.next 赋值给 cur,即从第二个结点开始遍历链表 👇
ListNode cur = head.next;
ListNode prev = head;
步骤四、循环遍历数组,循环的终止条件是 cur != null 即 cur 走到了链表的尾结点。进入循环判断目前 cur 的数值是不是题目规定需要删除的数值,如果是进入到 if 语句,如果不是进入到 else 语句,具体怎样进行的删除,下方图解: 👇
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;
力扣运行通过:👇
3️⃣ 全部代码:
class Solution {
public ListNode removeElements(ListNode head, int val) {
//判断链表为不为空
if (head == null){
return null;
}
ListNode cur = head.next;
ListNode prev = head;
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;
}
}
如果此题对大家有所帮助还请一键三连,谢谢支持!!!!
💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞💞