未排序链表去重 O(n^2)
思路:
第一重循环从链表的头节点开始,枚举一个保留的节点,这是因为我们保留的是「最开始出现的节点」。
第二重循环是枚举「最开始出现的节点」的下一个结点,到链表的末尾结束,将所有与保留节点相同的节点全部移除。
//移除未排序链表中的重复节点。保留最开始出现的节点。(两层循环)
//输入:[1, 2, 3, 3, 2, 1]
//输出:[1, 2, 3]
var removeDuplicateNodes = function (head) {
var slow = head;
while (slow) {
var fast = slow;
while (fast.next) {
if (slow.val === fast.next.val) {
fast.next = fast.next.next;
} else {
fast = fast.next;
}
}
slow = slow.next;
}
return head;
};
排序链表去重 O(n)
//排序链表去重 O(n)
var deleteDuplicates = function(head) {
let current = head //把首节点指针赋值给current
while(current && current.next) { //当前节点以及下一节点不为空时
if(current.val === current.next.val) { //值相等
current.next = current.next.next
}else {
current = current.next //值不相等
}
}
return head //返回首节点
};