LeetCode 83 :删除排链表中的重复元素

题目:

地址:https://leetcode.cn/problems/remove-duplicates-from-sorted-list/

方法一:

方法二:

java 复制代码
package com.zy.leetcode.LeetCode_04;

/**
 * @Author: zy
 * @Date: 2024-12-25-15:19
 * @Description: 删除排链表中的里复元素
 * 给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
 */
public class ListNode_04 {

    private int val;

    private ListNode_04 next;

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

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

    public ListNode_04() {
    }

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

    /**
     * 删除链表中重复的元素
     * 1,2,3,3  -》1,2,3
     * 1,1,2,3 -》 1,2,3
     *
     * @param node
     * @return
     */
    public ListNode_04 deleteDulEnum(ListNode_04 node) {
        if (node == null || node.next == null) {
            return node;
        }
        ListNode_04 p1 = node;
        ListNode_04 p2 = node.next;
        while (p2 != null) {
            System.out.println("p1.val=" + p1.val);
            System.out.println("p2.val=" + p2.val);
            if (p2.val == p1.val) {
                p1.next = p2.next;
            } else {
                p1 = p2;
            }
            p2 = p2.next;
        }
        return node;
    }

    /**
     * 递归思想
     *
     * @param node
     * @return
     */
    private ListNode_04 getDulEnumList(ListNode_04 node) {
        //节点数小于2
        if (node == null || node.next == null) {
            return node;
        }
        ListNode_04 nextNode = node.next;
        node.next = getDulEnumList(nextNode);
        if (node.val == nextNode.val) {
            return node.next;
        } else {
            return node;
        }
    }

    public static void main(String[] args) {
        int[] ints = {1, 1, 2, 4, 5, 6};
        ListNode_04 listNode = ListNode_04.initListNode(ints);
        while (listNode != null) {
            System.out.print(listNode.val + " ,");
            listNode = listNode.next;
        }

        System.out.println("\n--------------------------------");
        ListNode_04 node = new ListNode_04().deleteDulEnum(ListNode_04.initListNode(ints));
        while (node != null) {
            System.out.print(node.val + " ");
            node = node.next;
        }
        System.out.println("--------------------------------");
        ListNode_04 node1 = new ListNode_04().getDulEnumList(ListNode_04.initListNode(ints));
        while (node1 != null) {
            System.out.print(node1.val + " ");
            node1 = node1.next;
        }
    }
}
相关推荐
tainshuai2 小时前
用 KNN 算法解锁分类的奥秘:从电影类型到鸢尾花开
算法·分类·数据挖掘
Coovally AI模型快速验证8 小时前
农田扫描提速37%!基于检测置信度的无人机“智能抽查”路径规划,Coovally一键加速模型落地
深度学习·算法·yolo·计算机视觉·transformer·无人机
pusue_the_sun8 小时前
数据结构:二叉树oj练习
c语言·数据结构·算法·二叉树
RaymondZhao348 小时前
【全面推导】策略梯度算法:公式、偏差方差与进化
人工智能·深度学习·算法·机器学习·chatgpt
zhangfeng11338 小时前
DBSCAN算法详解和参数优化,基于密度的空间聚类算法,特别擅长处理不规则形状的聚类和噪声数据
算法·机器学习·聚类
圣保罗的大教堂9 小时前
leetcode 2348. 全 0 子数组的数目 中等
leetcode
啊阿狸不会拉杆9 小时前
《算法导论》第 32 章 - 字符串匹配
开发语言·c++·算法
小学生的信奥之路10 小时前
洛谷P3817题解:贪心算法解决糖果分配问题
c++·算法·贪心算法
你知道网上冲浪吗11 小时前
【原创理论】Stochastic Coupled Dyadic System (SCDS):一个用于两性关系动力学建模的随机耦合系统框架
python·算法·数学建模·数值分析
地平线开发者12 小时前
征程 6 | PTQ 精度调优辅助代码,总有你用得上的
算法·自动驾驶