# Heading
82.删除排序链表中的重复元素-ii (opens new window)
Tags: algorithms linked-list
Langs: c cpp csharp golang java javascript kotlin php python python3 ruby rust scala swift typescript
- algorithms
- Medium (49.74%)
- Likes: 410
- Dislikes: -
- Total Accepted: 76.4K
- Total Submissions: 153.3K
- Testcase Example: '[1,2,3,3,4,4,5]'
给定一个排序链表,删除所有含有重复数字的节点,只保留原始链表中 没有重复出现 的数字。
示例 1:
输入: 1->2->3->3->4->4->5 输出: 1->2->5
示例 2:
输入: 1->1->1->2->3 输出: 2->3
/*
* @lc app=leetcode.cn id=82 lang=javascript
*
* [82] 删除排序链表中的重复元素 II
*/
// @lc code=start
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
function ListNode(val) {
this.val = val;
this.next = null;
}
/**
* @param {ListNode} head
* @return {ListNode}
*/
var deleteDuplicates = function (head) {
const hair = new ListNode();
hair.next = head;
let p = hair, q = p.next, tmpVal = q ? q.val : null;
while (q && q.next) {
if (tmpVal === q.next.val) {
//删除相同元素的节点
while(q && q.next && tmpVal === q.next.val){
q = q.next
}
q = q.next
p.next = q
tmpVal = q ? q.val : null;
} else {
//更新p、q和当前值
p = q
q = q.next
tmpVal = q ? q.val : null;
}
}
return hair.next;
};
//方法二:hash记录元素的出现次数
//方法三:尾插法新建链表
// @lc code=end
// @after-stub-for-debug-begin
module.exports = deleteDuplicates;
// @after-stub-for-debug-end 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55