首页 > 试题广场 >

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

[编程题]删除有序链表中重复的元素-I
  • 热度指数:165215 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为,返回.
给出的链表为,返回.

数据范围:链表长度满足 ,链表中任意节点的值满足
进阶:空间复杂度 ,时间复杂度
示例1

输入

{1,1,2}

输出

{1,2}
示例2

输入

{}

输出

{}

说明:本题目包含复杂数据结构ListNode,点此查看相关信息
function deleteDuplicates( head ) {
    // write code here
    if(!head || !head.next) return head
    let list = head
    let front = head 
    let queen = head.next
    while(queen){
        if(front.val == queen.val){
            queen = queen.next
            front.next = front.next.next
        }else{
            front = front.next
            queen = queen.next
        }
    }
    return list
}
module.exports = {
    deleteDuplicates : deleteDuplicates
};
发表于 2022-07-10 11:09:12 回复(0)
双指针
function deleteDuplicates( head ) {
    // write code here
    if(head == null || head.next == null) return head;
    var pre = head;
    var temp = pre.val;
    var cur = pre.next;
    while(cur != null){
        if(cur.val <= temp){
            pre.next = cur.next;
            cur = cur.next;
        }else{
            pre = pre.next;
            cur = cur.next;
            temp = pre.val;
        }
    }
    return head;
}
发表于 2022-04-19 21:29:17 回复(0)
用两个指针pre 和 p ,pre是前指针,p是后指针
如果pre的val等于p的val,将pre.next指向p.next,p向后移动
如果不相等,两个指针同时向后移动一次

function deleteDuplicates( head ) {
    // write code here
        if (!head) return head

      let pre = head
      let p = pre.next
      while (p) {
        if (pre.val == p.val) {
          pre.next = p.next
          p = p.next
        }
        else {
          p = p.next
          pre = pre.next
        }

      }
      return head
}

发表于 2021-08-19 22:27:07 回复(0)
function deleteDuplicates( head ) {
    // write code here
    if(head == null){
        return head;
    }
    var p = head;
    while(p.next !== null){
        if(p.next.val == p.val){
            p.next = p.next.next;
        }else{
            p = p.next;
        }
    }
    return head;
}

发表于 2021-04-12 20:31:14 回复(0)
function deleteDuplicates( head ) {
    // write code here
    let cur = head
    while(cur&&cur.next){
        if(cur.val == cur.next.val){
           cur.next = cur.next.next 
        }
           else cur = cur.next
    } 
    return head
}

发表于 2020-12-28 16:11:09 回复(0)
JS版本,详细见注释
function ListNode(x) {
    this.val = x;
    this.next = null;
}

/**
 * 
 * @param head ListNode类 
 * @return ListNode类
 */
function deleteDuplicates(head) {
    // write code here
    //如果head为空,直接返回
    if (!head) {
        return head;
    }
    let cur = head,
        next = head.next;
    while (next) {
        //如果当前节点的值和下一个节点的值相等,next走,cur不动
        if (cur.val === next.val) {
            cur.next = next.next;
            next = next.next;
        }
        //否则,cur移到next,next移到next的下一个
        else {
            cur = next;
            next = next.next;
        }
    }
    return head;
}
module.exports = {
    deleteDuplicates: deleteDuplicates
};


发表于 2020-09-30 18:31:31 回复(0)