Java怎么删除排序链表中的重复元素

发布时间:2021-12-20 15:02:47 作者:iii
来源:亿速云 阅读:153
# Java怎么删除排序链表中的重复元素

在处理链表数据结构时,删除重复元素是一个常见需求。对于已排序的链表,我们可以利用其有序特性高效地完成去重操作。本文将介绍两种Java实现方法:**迭代法**和**递归法**,并分析它们的优缺点。

## 一、问题描述

给定一个**按升序排列**的链表,删除所有重复元素,使每个元素只出现一次。例如:

输入:1 → 1 → 2 → 3 → 3  
输出:1 → 2 → 3

## 二、迭代法实现

```java
public ListNode deleteDuplicates(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }
    
    ListNode current = head;
    while (current != null && current.next != null) {
        if (current.val == current.next.val) {
            current.next = current.next.next; // 跳过重复节点
        } else {
            current = current.next; // 移动指针
        }
    }
    return head;
}

时间复杂度:O(n),只需遍历一次链表
空间复杂度:O(1),仅使用常量额外空间

三、递归法实现

public ListNode deleteDuplicates(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }
    
    head.next = deleteDuplicates(head.next);
    return head.val == head.next.val ? head.next : head;
}

时间复杂度:O(n)
空间复杂度:O(n)(递归栈空间)

四、方法对比

方法 优点 缺点
迭代法 空间效率高 代码相对直接
递归法 代码简洁 栈溢出风险(长链表)

五、边界情况处理

  1. 空链表:直接返回null
  2. 单节点链表:无需处理
  3. 全重复链表:如 1→1→1,应返回1

六、扩展:删除所有重复项

如果需要彻底删除所有重复出现的元素(保留仅出现一次的元素),可采用双指针法:

public ListNode deleteAllDuplicates(ListNode head) {
    ListNode dummy = new ListNode(0);
    dummy.next = head;
    ListNode prev = dummy;
    
    while (head != null) {
        if (head.next != null && head.val == head.next.val) {
            while (head.next != null && head.val == head.next.val) {
                head = head.next;
            }
            prev.next = head.next; // 跳过所有重复节点
        } else {
            prev = prev.next;
        }
        head = head.next;
    }
    return dummy.next;
}

七、总结

对于已排序链表的去重: - 优先选择迭代法,兼顾效率和安全性 - 递归法适合链表长度可控的场景 - 注意处理边界条件,保证代码健壮性

掌握这些方法后,可以轻松应对LeetCode 83(保留重复项)和82(删除所有重复项)等相关题目。 “`

推荐阅读:
  1. 利用Java怎么删除排序链表中的重复元素
  2. Java如何实现删除排序数组中重复元素的方法

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

java

上一篇:云主机的特点和优势是什么

下一篇:云主机和vps的不同之处是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》