当前位置: 首页 > article >正文

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

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

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

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

    }
}


http://www.kler.cn/a/458111.html

相关文章:

  • 安卓系统主板_迷你安卓主板定制开发_联发科MTK安卓主板方案
  • 全面解析 Node-RED:功能、Docker 部署与实战示例
  • 基于TCP的Qt网络通信
  • 【信息系统项目管理师】第14章:项目沟通管理过程详解
  • 如何通过深度学习提升大分辨率图像预测准确率?
  • Python学习路线
  • 【MySql】2020-03-12 Windows安装MySQL5.7.28
  • Microi吾码|.NET、VUE快速搭建项目,低代码便捷开发教程
  • QML学习(五) 做出第一个简单的应用程序
  • 【Linux网络编程】第五弹---构建基于UDP的简单聊天室系统:代码结构与功能模块详解
  • 评分模型在路网通勤习惯分析中的应用——提出问题(1)
  • 【docker系列】创建博客 halo 2.11
  • 【yolov5】实现FPS游戏人物检测,并定位到矩形框上中部分,实现自瞄
  • 项目实践-贪吃蛇小游戏
  • 基于Resnet、LSTM、Shufflenet及CNN网络的Daily_and_Sports_Activities数据集仿真
  • 机器人骑自行车过程的MATLAB建模与数值仿真模拟
  • Linux之ARM(MX6U)裸机篇----1.开发环境搭建
  • C语言基础——指针(5)
  • MySQL基础-常见的增删改查操作语句总结
  • 【实习】面经:海康威视-软件开发工程师(嵌入式)
  • App信息收集(小迪网络安全笔记~
  • [Unity Shader] [图形渲染]Shader数学基础18-内置变量
  • git 在windows上显示很多文件有改动实际没有变化
  • c/c++ 无法跳转定义
  • 爬虫 APP 逆向 ---> shopee(虾皮) 电商
  • 表单元素(标签)有哪些?