前置知识
- 数据结构-链表: 熟悉删除节点的操作。
- 数据结构-哈希表(如果不太了解,那么可以跳过哈希表方法的部分,笔者提供了数组当哈希表的例子可自行阅读)
题目1
删除排序单链表值重复出现的节点
删除无序单链表值重复出现的节点
题目1:删除排序单链表重复出现的节点
head = [1,1,2,3,3]
删除值重复的,只保留一份。链表有序!
1.哈希大法
利用哈希表我们可以做到线性查询 O ( n ) O(n) O(n), 搞一个哈希表,随时查询。
具体过程:
- 先把头节点存储到哈希表中, 因为最初是空表。
- 搞两个节点指针,cur,prev。prev指向cur的前驱节点,cur作为循环变量, 当cur指向值重复节点时就进行删除。
class Solution {
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
return head;
}
HashSet<Integer> set = new HashSet<>();
set.add(head.val);
ListNode prev = head, cur = head.next;
while (cur != null) {
if (set.contains(cur.val)) {
prev.next = cur.next;// 删除cur指向节点
cur = prev.next;// cur指向下一个节点。
} else {
// set不包含节点cur.val
// 写入哈希表
set.add(cur.val);
// 调整
prev = cur;
cur = cur.next;
}
}
return head;// 返回当前头节点
}
}
2.不会哈希表看这,数组手撕哈希表
不会哈希表怎么办?我的语言没有内置哈希表啊。
很简单,数组就可以充当哈希表。做到 O ( 1 ) O(1) O(1

最低0.47元/天 解锁文章
669

被折叠的 条评论
为什么被折叠?



