首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在java中删除链表中的重复项

在Java中删除链表中的重复项可以通过以下步骤来实现:

  1. 创建一个HashSet用于存储链表中出现过的元素。
  2. 遍历链表,对于每个节点:
    • 检查当前节点的值是否已经存在于HashSet中。
    • 如果存在,说明该节点是重复的,将当前节点的前一个节点的next指针指向当前节点的next节点,从而删除当前节点。
    • 如果不存在,将当前节点的值添加到HashSet中,并将当前节点移动到下一个节点。
  • 返回链表的头节点。

以下是一种可能的实现示例:

代码语言:txt
复制
import java.util.HashSet;

class ListNode {
    int val;
    ListNode next;

    ListNode(int val) {
        this.val = val;
    }
}

public class Main {
    public static ListNode deleteDuplicates(ListNode head) {
        if (head == null) {
            return null;
        }
        
        HashSet<Integer> set = new HashSet<>();
        ListNode current = head;
        ListNode prev = null;
        
        while (current != null) {
            if (set.contains(current.val)) {
                prev.next = current.next;
            } else {
                set.add(current.val);
                prev = current;
            }
            current = current.next;
        }
        
        return head;
    }
    
    public static void main(String[] args) {
        // 创建一个有重复项的链表: 1 -> 2 -> 2 -> 3 -> 3 -> 4
        ListNode head = new ListNode(1);
        head.next = new ListNode(2);
        head.next.next = new ListNode(2);
        head.next.next.next = new ListNode(3);
        head.next.next.next.next = new ListNode(3);
        head.next.next.next.next.next = new ListNode(4);
        
        // 删除重复项
        head = deleteDuplicates(head);
        
        // 输出结果:1 -> 2 -> 3 -> 4
        ListNode current = head;
        while (current != null) {
            System.out.print(current.val + " -> ");
            current = current.next;
        }
        System.out.println("null");
    }
}

这个算法的时间复杂度为O(n),其中n是链表的长度。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

5分16秒

【剑指Offer】18.2 删除链表中重复的结点

7.5K
6分30秒

【剑指Offer】3. 数组中重复的数字

24.3K
33分30秒

Java零基础-299-多态在开发中的作用

9分31秒

14-项目第六、七阶段/06-尚硅谷-书城项目-删除购物车中的商品项

6分19秒

44.尚硅谷_硅谷商城[新]_在适配器中删除选中的item.avi

9分4秒

Java零基础-300-总结多态在开发中的作用

10分3秒

65-IOC容器在Spring中的实现

7分9秒

MySQL教程-47-删除表中的数据

10分28秒

JavaSE进阶-035-接口在开发中的作用

7分46秒

JavaSE进阶-037-接口在开发中的作用

32分47秒

JavaSE进阶-038-接口在开发中的作用

5分55秒

JavaSE进阶-034-接口在开发中的作用

领券