首页 > 其他分享 >LeetCode 82:删除排序链表中的重复元素 II

LeetCode 82:删除排序链表中的重复元素 II

时间:2024-12-29 13:02:45浏览次数:7  
标签:node II ListNode val next 链表 82 null

题目:
在这里插入图片描述

方法一:
在这里插入图片描述
方法二:
在这里插入图片描述
代码示例

package com.zy.leetcode.LeetCode_82;

/**
 * @Author: zy
 * @Date: 2024-12-26-10:51
 * @Description:
 * .删除排序链表中的重复元素 II
 */
public class ListNode_82 {

    private int val;

    private ListNode_82 next;

    public ListNode_82(int val, ListNode_82 next) {
        this.val = val;
        this.next = next;
    }

    public ListNode_82() {
    }

    public ListNode_82(int val) {
        this.val = val;
    }

    /**
     * 构造一个方法,输入一个数组,然后初始化链表
     */
    public static ListNode_82 initListNode(int[] arr) {
        ListNode_82 dummy = new ListNode_82(0);
        ListNode_82 cur = dummy;
        for (int num : arr) {
            cur.next = new ListNode_82(num);
            cur = cur.next;
        }
        return dummy.next;
    }

    private void print(ListNode_82 node) {
        while (node != null) {
            System.out.print(node.val + " -> ");
            node = node.next;
        }
    }

    /**
     * 递归
     *
     * @param node
     * @return
     */
    private ListNode_82 deleteDuplicateNode(ListNode_82 node) {
        //临界条件判断
        if (node == null || node.next == null) {
            return node;
        }
        if (node.val == node.next.val) {
            // 找到第一个与下一个值不等的节点
            while (node.next != null && node.val == node.next.val) {
                node.next = node.next.next;
            }
            return deleteDuplicateNode(node.next);
        } else {
            node.next = deleteDuplicateNode(node.next);
            return node;
        }
    }

    private ListNode_82 deleteDuplicateNode2(ListNode_82 node) {
        //临界条件判断
        if (node == null || node.next == null) {
            return node;
        }
        ListNode_82 s = new ListNode_82(-1, node);
        ListNode_82 p1 = s;
        ListNode_82 p2, p3;

        while ((p2 = p1.next) != null && (p3 = p2.next) != null) {
            if (p2.val == p3.val) {
                while ((p3 = p3.next) != null && (p2.val == p3.val)) {
                    //不做操作
                }
                //找到了不相等的位置
                p1.next = p3;
            } else {
                p1 = p1.next;
            }
        }
        return s.next;
    }

    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 3, 4, 4, 5};
        ListNode_82 head = initListNode(arr);
        System.out.print("原始链表:");
        head.print(head);
        System.out.println();

        ListNode_82 result = new ListNode_82().deleteDuplicateNode(head);
        System.out.print("删除后链表1:");
        result.print(result);

        System.out.println();

        ListNode_82 result1 = new ListNode_82().deleteDuplicateNode(head);
        System.out.print("删除后链表2:");
        result.print(result1);

    }
}

标签:node,II,ListNode,val,next,链表,82,null
From: https://blog.csdn.net/qq_41041630/article/details/144803715

相关文章

  • 链表
    includeusingnamespacestd;structNode{intdata;Node*next;};Node*CreateNode(intdata){Node*newNode=newNode();newNode->data=data;newNode->next=NULL;returnnewNode;}voidtraverseLinkedList(Node*head){Node*current=head;while(current......
  • 拉链表,流⽔表以及快照表的含义和特点
    拉链表含义拉链表主要用于记录数据的历史变化情况。从数据结构角度看,它的每条记录都包含了一个实体(如客户、产品等)的关键信息以及两个时间戳字段,即起始日期(Start_Date)和结束日期(End_Date)。起始日期表示这条记录开始生效的时间,结束日期表示这条记录失效的时间。当数据初次录......
  • 数据结构之线性表之链表(附加一个考研题)
    链表的定义链表的结构:单链表-初始化代码实现:单链表-头插法代码实现:这里我给大家分析一下我们每创建一个新的节点都要插在头节点的后面,我们一定要注意顺序一定要先让新节点指向头节点指向的下一个节点,再让头节点指向新的节点单链表-遍历代码实现:代码分析:这里我......
  • 链表 实现复杂的数据结构
    `#includeusingnamespacestd;structNode{intdata;Node*next;};Node*CreateNode(intdata){Node*newNode=newNode();newNode->data=data;newNode->next=NULL;returnnewNode;}voidtraverseLinkedList(Node*head){Node*current=head;while(curre......
  • ssm图书管理系统设计与实现+vue(10782)
     有需要的同学,源代码和配套文档领取,加文章最下方的名片哦一、项目演示项目演示视频二、资料介绍完整源代码(前后端源代码+SQL脚本)配套文档(LW+PPT+开题报告)远程调试控屏包运行三、技术介绍Java语言SSM框架SpringBoot框架Vue框架JSP页面Mysql数据库IDEA/Eclipse开发四、项......
  • 题海拾贝:有关链表的模拟练习题
        Hello大家好!很高兴我们又见面啦!给生活添点passion,开始今天的编程之路!我的博客:<但凡.我的专栏:《编程之路》、《数据结构与算法之美》、《题海拾贝》欢迎点赞,关注!    这一篇我给大家提供了三道题,都是静态链表德使用以及静态链表增删查改的模拟实现1、......
  • 删除拼排序链表中的重复元素(最优解)
    题目来源82.删除排序链表中的重复元素II-力扣(LeetCode)题目描述给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。示例1:输入:head=[1,2,3,3,4,4,5]输出:[1,2,5]示例2:输入:head=[1,1,1,2,3]......
  • LeetCode 23 : 合并K个升序链表
    题目:解题思路:1.将多个链表合并为两个链表2.使用21题用的,将两个有序链表合并代码示例:packagecom.zy.leetcode.LeetCode_23;/***@Author:zy*@Date:2024-12-26-21:37*@Description:合并K个升序链表*多路递归*/publicclassListNode_23{priv......
  • ssm826基于ssm的电影评论系统+vue 适合初学者学习的项目
    博主介绍:专注于Java(springbootssm等开发框架)vue .net phpphythonnode.js  uniapp微信小程序等诸多技术领域和毕业项目实战、企业信息化系统建设,从业十五余年开发设计教学工作☆☆☆精彩专栏推荐订阅☆☆☆☆☆不然下次找不到哟我的博客空间发布了2000+毕设......
  • leetcode 826. 安排工作以达到最大收益
    826.安排工作以达到最大收益首先是自己写的构思代码classSolution{public:intmaxProfitAssignment(vector<int>&difficulty,vector<int>&profit,vector<int>&worker){sort(worker.begin(),worker.end());intn=difficulty.siz......