LeetCode第203道题目-移除链表元素(考察链表知识)

文章目录

前言

LeetCode第203道题目-移除链表元素,主要考察链表相关知识

题目链接:203. 移除链表元素

 

一、题目描述

题目描述中左边已经给出了示例,右边给出了ListNode的模板以及我们要提交的Solution类的模板;

注意:我们需要用到提供的ListNode类来完成Solution类的实现,但最终提交代码的时候只需要提交Solution类即可。 

 

二、解题思路

1.不通过虚拟头节点来解决问题

我们需要分两步来打开解题思路:第一步,我们首先单独处理头节点的逻辑,第二步我们单独处理除了头节点以外节点的逻辑;(具体逻辑见下面的代码)

注意一点就是:题目中说明我们需要删除和给定元素的所有相同的链表元素,可能会有多个,所以我们要通过while循环去处理问题;

(prev:代表当前节点的前一个节点)

代码如下:

/**
 * @Description 不通过虚拟头节点来处理链表问题
 * @Author Follow Wind
 * @Date 2021/1/7 9:21
 */
public class Solution {

    public ListNode removeElements(ListNode head, int val) {
        
        //1. 首先处理头节点逻辑
        while (head != null && head.val == val) {
            ListNode retNode = head;
            head = head.next;
            retNode.next = null;
        }
        // 如果此链表中所有的元素都和要删除的元素相同,那么经过第一步的操作,最后剩下的head就为null
        if (head == null)
            return null;

        //2. 然后再处理除头节点以外的逻辑
        ListNode prev = head;
        while (prev.next != null) {
            if (prev.next.val == val) {
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
            } else {
                prev = prev.next;
            }
        }
        return head;
    }
}

 

2.通过虚拟头节点来解决问题

设置一个虚拟头节点,名为dummyHead,那么我们就不需要单独的去处理头节点的逻辑,我们用除头节点外的那一套逻辑就可以处理整个链表的问题;

代码如下:

/**
 * @Description 通过头节点处理问题
 * @Author Follow Wind
 * @Date 2021/1/7 9:42
 */
public class Solution {


    public ListNode removeElements(ListNode head, int val) {

        // 申明一个头节点(这里的-1只是一个随便的数字,大家也可以随便取,只要是int类型即可)
        ListNode dummyHead = new ListNode(-1);
        dummyHead.next  = head;
        ListNode prev = dummyHead;
        while (prev.next != null) {
            if (prev.next.val == val) {
                ListNode delNode = prev.next;
                prev.next = delNode.next;
                delNode.next = null;
            } else {
                prev = prev.next;
            }
        }
        //注意:最后返回的是dummyHead.next而不是head
        return dummyHead.next;
    }
}

总结

此道题目主要考察了链表的基本知识,对于学习数据结构中链表有很大的帮助,有任何问题,评论区交流,共同进步!

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

弗兰随风小欢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值