给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为 , 返回
, 返回 .
.
给出的链表为 , 返回
, 返回 .
. 
 例如:
给出的链表为
给出的链表为
  数据范围:链表长度  ,链表中的值满足
,链表中的值满足  
  
   要求:空间复杂度 ) ,时间复杂度
,时间复杂度 ) 
  
   进阶:空间复杂度 ) ,时间复杂度
,时间复杂度 ) 
 
                                        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
}