02.01. 移除重复节点
02.01. 移除重复节点
1、题目
编写代码,移除未排序链表中的重复节点。保留最开始出现的节点。
1)示例1
输入:[1, 2, 3, 3, 2, 1]
输出:[1, 2, 3]
2)示例2
输入:[1, 1, 1, 1, 2]
输出:[1, 2]
2、初步作答
2.1 思路
- 创建集合存储节点中首次出现的整数
- 比较节点数值是否已存在于集合中,已存在直接删除节点,不存在直接存入集合
2.2 做法
- 判断链表头结点是否为空,为空直接返回头结点
- 创建一个 Set 集合
- 比较节点数值是否已存在于集合中,已存在直接删除节点,不存在直接存入集合
- 返回头结点
2.3 代码
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode removeDuplicateNodes(ListNode head) {
if(head == null){
return head;
}
Set<Integer> a = new HashSet<Integer>();
a.add(head.val);
ListNode list = head;
while(list.next != null){
if(a.add(list.next.val)){
list = list.next;
}else{
list.next = list.next.next;
}
}
list.next = null;
return head;
}
}
2.4 思考
因为链表的这道题特地去看了一下集合还有链表,发现集合真香
3、其余解法
- 来自力扣作者:jyd
class Solution {
public ListNode removeDuplicateNodes(ListNode head) {
ListNode pre = null, cur = head;
HashSet<Integer> visited = new HashSet<>();
while (cur != null) {
if (visited.contains(cur.val)) {
pre.next = cur.next;
}
else {
visited.add(cur.val);
pre = cur;
}
cur = cur.next;
}
return head;
}
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)