给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为
, 返回
.
给出的链表为
, 返回
.
例如:
给出的链表为
给出的链表为
数据范围:链表长度
,链表中的值满足
要求:空间复杂度
,时间复杂度
进阶:空间复杂度
,时间复杂度
function deleteDuplicates( head ) {
let map = new Map()
let p = head
while(p){
if(!map.has(p.val)){
map.set(p.val,1)
}else{
let tmp = map.get(p.val)
tmp++
map.set(p.val,tmp)
}
p = p.next
}
let node = new ListNode(0)
node.next = head
let cur = node
while(cur.next !== null){
if(map.get(cur.next.val) !== 1){
cur.next = cur.next.next
}else{
cur = cur.next
}
}
return node.next
}v function deleteDuplicates( head ) {
// write code here
let newHead = null
let newPre = null
let cur = head
let preVal = null
while (cur) {
const next = cur.next
if (cur.val !== preVal && (!next || next.val !== cur.val)) {
const node = {
val: cur.val,
next: null
}
if (newPre === null) {
newHead = node
newPre = node
} else {
newPre.next = node
newPre = node
}
}
preVal = cur.val
cur = next
}
return newHead
}