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;
        }
    }
}
相关推荐
wyhwust8 分钟前
数组----插入一个数到有序数列中
java·数据结构·算法
im_AMBER11 分钟前
Leetcode 59 二分搜索
数据结构·笔记·学习·算法·leetcode
gihigo199818 分钟前
基于MATLAB的IEEE 14节点系统牛顿-拉夫逊潮流算法实现
开发语言·算法·matlab
leoufung38 分钟前
LeetCode 61. 旋转链表(Rotate List)题解与思路详解
leetcode·链表·list
万物挽挽1 小时前
数据结构核心
数据结构
甄心爱学习1 小时前
数据挖掘-聚类方法
人工智能·算法·机器学习
ID_180079054732 小时前
基于 Python 的淘宝商品详情数据结构化解析:SKU、价格与库存字段提取
开发语言·数据结构·python
星释2 小时前
Rust 练习册 82:Hamming与字符串处理
开发语言·算法·rust
小张成长计划..3 小时前
【C++】16:模板进阶
c++·算法
AndrewHZ3 小时前
【图像处理基石】如何使用大模型进行图像处理工作?
图像处理·人工智能·深度学习·算法·llm·stablediffusion·可控性