BM16 删除有序链表中重复的元素-II

描述
给出一个升序排序的链表,删除链表中的所有重复出现的元素,只保留原链表中只出现一次的元素。
例如:
给出的链表为1 \to 2\to 3\to 3\to 4\to 4\to51→2→3→3→4→4→5, 返回1\to 2\to51→2→5.
给出的链表为1\to1 \to 1\to 2 \to 31→1→1→2→3, 返回2\to 32→3.

数据范围:链表长度 0 \le n \le 100000≤n≤10000,链表中的值满足 |val| \le 1000∣val∣≤1000
要求:空间复杂度 O(n)O(n),时间复杂度 O(n)O(n)
进阶:空间复杂度 O(1)O(1),时间复杂度 O(n)O(n)
示例1
输入:
{1,2,2}
返回值:
{1}
示例2
输入:
{}
返回值:
{}
思路:暴力拆解
代码:

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */

/**
  * 
  * @param head ListNode类 
  * @return ListNode类
  */
function deleteDuplicates( head ) {
    // write code here
    if(!head || !head.next) return head;
    let pre = head.next;
    let obj = head;
    let arr1 = [];
    let arr2 = [];
   while(obj){
      if(pre && obj.val === pre.val){
          arr1.push(obj.val);
      }
      if(pre){
           pre = pre.next;
       }
      arr2.push(obj.val);
      obj = obj.next;
   }
   let newArr = arr2.filter((e) =>{
       let temp = true;
       for(let i = 0; i < arr1.length; i++){
           if(arr1[i] === e){
               temp = false;
           }
       }
       return temp;
   })
   if(newArr.length === 0) return null;   
   let obj2 = new ListNode(newArr[0]);
   let obj3 = obj2;
   for(let i = 1; i < newArr.length; i++){
       obj3.next = new ListNode(newArr[i]);
       obj3 = obj3.next;
   }
    return obj2;
}
module.exports = {
    deleteDuplicates : deleteDuplicates
};

来自牛客编程题 https://www.nowcoder.com/exam/oj

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值