Java 链表去重:移除重复节点算法详解

本文将介绍如何使用 Java 语言移除未排序链表中重复节点的算法。该算法保留链表中第一次出现的节点,并使用 Stream 流进行去重操作。

算法描述:

  1. 将链表转换为数组。
  2. 使用 Stream 流对数组进行去重。
  3. 将去重后的数组转换为链表。

代码示例:

import java.util.Arrays;
import java.util.stream.Collectors;

public class Solution {
    public ListNode removeDuplicateNodes(ListNode head) {
        if (head == null) {
            return null;
        }
        
        // 将链表转换为数组
        int[] nums = new int[0];
        ListNode curr = head;
        while (curr != null) {
            nums = Arrays.copyOf(nums, nums.length + 1);
            nums[nums.length - 1] = curr.val;
            curr = curr.next;
        }
        
        // 使用Stream流对数组进行去重
        int[] distinctNums = Arrays.stream(nums).distinct().toArray();
        
        // 将去重后的数组转换为链表
        ListNode dummy = new ListNode(0);
        curr = dummy;
        for (int num : distinctNums) {
            curr.next = new ListNode(num);
            curr = curr.next;
        }
        
        return dummy.next;
    }
}

代码解释:

  1. 将链表转换为数组:

    • 使用 while 循环遍历链表,并将每个节点的值添加到 nums 数组中。
  2. 使用 Stream 流对数组进行去重:

    • 使用 Arrays.stream(nums).distinct().toArray() 将数组转换为 Stream 流,并使用 distinct() 方法进行去重,最后将结果转换为数组。
  3. 将去重后的数组转换为链表:

    • 创建一个虚拟头节点 dummy,用于方便操作。
    • 使用 for 循环遍历去重后的数组,为每个值创建一个新的节点并连接到链表中。

总结:

本文介绍了一种使用 Java 语言移除未排序链表中重复节点的算法,并提供了完整的代码示例。该算法通过将链表转换为数组,使用 Stream 流进行去重,最后将去重后的数组转换回链表,实现了去重功能。该方法简单易懂,易于实现。

Java 链表去重:移除重复节点算法详解

原文地址: https://www.cveoy.top/t/topic/qkKF 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录