给定一个排序链表,删除所有重复的元素,使得每个元素只出现一次。

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
function ListNode(val) {
this.val = val;
this.next = null;
}

let node = {
val: 1,
next: {
val: 1,
next: {
val: 2,
next: {
val: 3,
next: {
val: 4,
next: null
}
}
}
}
}

const fn = function (node) {
let cur = node;
while (cur && cur.next) {
if(cur.val === cur.next.val){
cur.next = cur.next.next;
}else{
cur = cur.next;
}
}
return node;
}

console.log(JSON.stringify(fn(node))); // {"val":1,"next":{"val":2,"next":{"val":3,"next":{"val":4,"next":null}}}}

给定一个排序链表,删除所有含有重复数字的结点,只保留原始链表中 没有重复出现的数字。

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
56

// 链表构造函数
function ListNode(val) {
this.val = val;
this.next = null;
}

let node = {
val: 1,
next: {
val: 2,
next: {
val: 4,
next: {
val: 4,
next: {
val: 4,
next: null
}
}
}
}
}

const fn2 = function (head) {
// 特殊情况,没有结点,只有一个结点,直接返回
if (!head && !head.next) {
return head;
}

// 新建一个空节点,保证链表可以访问
let dummy = new ListNode('');
dummy.next = head;
// 可以理解为指针,记录循环到那一步
let cur = dummy;

while (cur.next && cur.next.next) {
if (cur.next.val === cur.next.next.val) {
// 记录重复的值
let value = cur.next.val;
// 判断后续结点是否还有重复
while (cur.next && cur.next.val === value) {
// 重复就删除该结点
cur.next = cur.next.next;
}
} else {
cur = cur.next;
}

}
return dummy.next;

}

console.log(fn2(node)); // { val: 1, next: { val: 2, next: null } }