Java 链表去重:移除重复节点算法详解
Java 链表去重:移除重复节点算法详解
本文将介绍如何使用 Java 语言移除未排序链表中重复节点的算法。该算法保留链表中第一次出现的节点,并使用 Stream 流进行去重操作。
算法描述:
- 将链表转换为数组。
- 使用 Stream 流对数组进行去重。
- 将去重后的数组转换为链表。
代码示例:
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;
}
}
代码解释:
-
将链表转换为数组:
- 使用
while循环遍历链表,并将每个节点的值添加到nums数组中。
- 使用
-
使用 Stream 流对数组进行去重:
- 使用
Arrays.stream(nums).distinct().toArray()将数组转换为 Stream 流,并使用distinct()方法进行去重,最后将结果转换为数组。
- 使用
-
将去重后的数组转换为链表:
- 创建一个虚拟头节点
dummy,用于方便操作。 - 使用
for循环遍历去重后的数组,为每个值创建一个新的节点并连接到链表中。
- 创建一个虚拟头节点
总结:
本文介绍了一种使用 Java 语言移除未排序链表中重复节点的算法,并提供了完整的代码示例。该算法通过将链表转换为数组,使用 Stream 流进行去重,最后将去重后的数组转换回链表,实现了去重功能。该方法简单易懂,易于实现。
原文地址: https://www.cveoy.top/t/topic/qkKF 著作权归作者所有。请勿转载和采集!