• day7【代码随想录】移除链表元素



    一、链表定义

    public class ListNode {
        // 结点的值
        int val;
    
        // 下一个结点
        ListNode next;
    
        // 节点的构造函数(无参)
        public ListNode() {
        }
    
        // 节点的构造函数(有一个参数)
        public ListNode(int val) {
            this.val = val;
        }
    
        // 节点的构造函数(有两个参数)
        public ListNode(int val, ListNode next) {
            this.val = val;
            this.next = next;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    二、移除链表元素(力扣203)

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

    在这里插入图片描述

    1、直接使用原来的链表来进行删除操作

     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            while(head !=null && head.val==val){
                head=head.next;
            }
            if(head==null){
                return null;
            }
            ListNode pre = head;
            ListNode cur = head.next;
            while(cur!=null){
                if(cur.val==val){
                    pre.next=cur.next;
                }else{
                    pre = cur;
                }
                cur = cur.next;
            }
            return head;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    2、设置一个虚拟头结点在进行删除操作

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode() {}
     *     ListNode(int val) { this.val = val; }
     *     ListNode(int val, ListNode next) { this.val = val; this.next = next; }
     * }
     */
    class Solution {
        public ListNode removeElements(ListNode head, int val) {
            if(head==null){
                return head;
            }
            //增加头结点
            ListNode dummy = new ListNode(-1,head);
            ListNode pre = dummy;
            ListNode cur = head;
            while(cur!=null){
                if(cur.val==val){
                    pre.next=cur.next;
                }else{
                    pre=cur;
                }
                cur=cur.next;
            }
            return dummy.next;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30

    在这里插入图片描述

    三、删除链表中的节点(力扣237)

    有一个单链表的 head,我们想删除它其中的一个节点 node。
    给你一个需要删除的节点 node 。你将 无法访问 第一个节点 head
    链表的所有值都是 唯一的,并且保证给定的节点 node 不是链表中的最后一个节点。
    删除给定的节点。

    注意,删除节点并不是指从内存中删除它。这里的意思是:
    给定节点的值不应该存在于链表中。
    链表中的节点数应该减少 1。
    node 前面的所有值顺序相同。
    node 后面的所有值顺序相同。

    在这里插入图片描述
    在这里插入图片描述
    乍一看题目不知道在说什么
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    看完大家的吐槽之后 大概明白要干什么了,那就把把自己变成儿子 再把儿子干掉

    /**
     * Definition for singly-linked list.
     * public class ListNode {
     *     int val;
     *     ListNode next;
     *     ListNode(int x) { val = x; }
     * }
     */
    class Solution {
        public void deleteNode(ListNode node) {
            node.val=node.next.val;
            node.next=node.next.next;
        }
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14

    在这里插入图片描述


  • 相关阅读:
    CSS 之 z-index 属性详解
    Ext Direct 开发全介绍
    [MAUI]模仿iOS多任务切换卡片滑动的交互实现
    淘宝/天猫按图搜索淘宝商品(拍立淘) API 返回值说明
    408 | 【2018年】计算机统考真题 自用回顾知识点整理
    信德新材深交所上市:市值109亿 尹洪涛父子为实控人
    万字总结:分布式系统的38个知识点
    TDD、BDD、ATDD都是什么、有什么区别?(上)
    【Egg从基础到进阶】二:安装本地Mysql
    mysql数据物理迁移
  • 原文地址:https://blog.csdn.net/qq_42338744/article/details/128058206