栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 求解移除链表元素

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 求解移除链表元素

文章目录
    • 一、题目
    • 二、虚拟头结点
    • 三、代码
    • 四、总结

一、题目

给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val == val 的节点,并返回 新的头节点 。

二、虚拟头结点

该题比较简单,就是删除链表节点,删除时需要考虑是否是头结点

所以头结点如何移除呢,其实只要将头结点向后移动一位就可以,这样就从链表中移除了一个头结点。

这样移除了一个头结点,是不是发现,在单链表中移除头结点 和 移除其他节点的操作方式是不一样,其实在写代码的时候也会发现,需要单独写一段逻辑来处理移除头结点的情况。

所以常规思路先判断是否头结点也需要删除,然后再遍历判断,常规代码:

class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //如果头结点也需要删除
        while(head !=null && head.val==val){
            head = head.next;
        }
        //如果head原本为空,或者链表所有节点都需要删除
        if(head==null){
            return head;
        }
        //设定前驱
        ListNode pre = head;
        ListNode next = head.next;
        while(next !=null){
            //移除该节点
            if(next.val==val){
                pre.next = next.next;
            }else{
                pre = next;
            }
            next = next.next;
        }
        return head;
    }
}

另外一种思路,也可以设置一个虚拟头结点,比如同样移除元素 1:

这里来给链表添加一个虚拟头结点为新的头结点,此时要移除这个旧头结点元素1。

就可以使用和移除链表其他节点的方式统一了

三、代码
class Solution {
    public ListNode removeElements(ListNode head, int val) {
        //设置虚拟头结点
        ListNode dummyHead = new ListNode(0);
        //将虚拟头结点指向head,方面后面做删除操作
        dummyHead.next = head;
        ListNode cur = dummyHead;
        while (cur.next != null) {
            if (cur.next.val == val) {
                cur.next = cur.next.next;
            } else {
                cur = cur.next;
            }
        }
        //这里返回值需要注意
        return dummyHead.next;
    }
}
四、总结

为了删除节点操作统一,可以设置一个虚拟头结点:

//设置虚拟头结点
ListNode dummyHead = new ListNode(0);
//将虚拟头结点指向 head,方面后面做删除操作
dummyHead.next = head;

需要注意的此时的返回值,需要返回虚拟头结点的下一个节点:

return dummyHead.next;
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439434.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号