83,删除排序链表中的重复元素
题目描述
给定一个已排序的链表的头 head , 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
示例
输入:head = [1,1,2]
输出:[1,2]
题解
代码:
var deleteDuplicates = function(head) {
if(!head) return null
let pre = head, curr = head.next
if(!curr) return head
while(curr){
if(curr.val == pre.val){
pre.next = curr.next
}else{
pre = pre.next
}
curr = curr.next
}
return head
};
82,删除排序链表中的重复元素II
题目描述
给定一个已排序的链表的头 head , 删除原始链表中所有重复数字的节点,只留下不同的数字 。返回 已排序的链表 。
示例
输入:head = [1,2,3,3,4,4,5]
输出:[1,2,5]
题解
代码:
/**
一次遍历,判断每一个元素的值是否和前一个相等或者是和后面一个相等
如果相等 就直接跳过
如果不相等,就让前一个唯一的值slow指向该元素
*/
var deleteDuplicates = function(head) {
let newNode = new ListNode('a', head)
let slow = newNode, curr = head,pre = newNode
while(curr){
if(curr.val == pre.val || (curr.next && curr.val == curr.next.val)){
pre = pre.next
curr = curr.next
}else{
slow.next = curr
slow = slow.next
pre = pre.next
curr = curr.next
}
}
slow.next = null
return newNode.next
};