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;
        }
    }
}
相关推荐
Chiyamin12 分钟前
图算法基础
数据结构·c++·算法
C——Coder16 分钟前
关于柔性数组
算法·柔性数组
AlgoNewbie20 分钟前
牛客周赛 Round 88【题解完成】
算法
luckycoding1 小时前
2747. 统计没有收到请求的服务器数目
算法
0x4081 小时前
数据结构--线性表&顺序表示(上)
数据结构·笔记
ChoSeitaku2 小时前
NO.80十六届蓝桥杯备战|数据结构-字符串哈希|兔子与兔子(C++)
数据结构·蓝桥杯·哈希算法
TT哇2 小时前
【前缀和】矩阵区域和(medium)
java·线性代数·算法·矩阵
应以大橘为重3 小时前
interrupt子系统中的数据结构
linux·数据结构·驱动开发
Elendill3 小时前
【算法笔记】并查集详解
笔记·python·算法
BanyeBirth4 小时前
C++高精度算法(加、减、乘)
开发语言·c++·算法