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;
        }
    }
}
相关推荐
智者知已应修善业6 小时前
【求中位数】2024-1-23
c语言·c++·经验分享·笔记·算法
地平线开发者7 小时前
PTQ 量化数值范围与优化
算法·自动驾驶
sali-tec7 小时前
C# 基于halcon的视觉工作流-章68 深度学习-对象检测
开发语言·算法·计算机视觉·重构·c#
测试人社区-小明7 小时前
智能弹性伸缩算法在测试环境中的实践与验证
人工智能·测试工具·算法·机器学习·金融·机器人·量子计算
罗西的思考7 小时前
【Agent】MemOS 源码笔记---(5)---记忆分类
人工智能·深度学习·算法
qq_4335545410 小时前
C++数位DP
c++·算法·图论
AshinGau11 小时前
Softmax 与 交叉熵损失
神经网络·算法
似水এ᭄往昔11 小时前
【C++】--AVL树的认识和实现
开发语言·数据结构·c++·算法·stl
栀秋66611 小时前
“无重复字符的最长子串”:从O(n²)哈希优化到滑动窗口封神,再到DP降维打击!
前端·javascript·算法
xhxxx11 小时前
不用 Set,只用两个布尔值:如何用标志位将矩阵置零的空间复杂度压到 O(1)
javascript·算法·面试