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;
    }
}

总结

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

猜你喜欢

转载自blog.csdn.net/qq_32575047/article/details/112303159