《BM15 删除有序链表中重复的元素-I》JavaScript实现

题目描述

删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为1→1→2,返回1→2.
给出的链表为1→1→2→3→3,返回1→2→3.

数据范围:链表长度满足 0≤n≤100,链表中任意节点的值满足∣val∣≤100

进阶:空间复杂度 O(1),时间复杂度O(n)

示例1:

输入:{1,1,2}

返回值:{1,2}

示例2:

输入:{}

返回值:{}

解题思路

首先,判断链表是否为空,为空直接返回null,由于链表中元素有序,每次判断当前指针和下一指针指向的元素内容是否相同,如果相同就删除下一节点,最后返回head(因为p指针移动到最后指向的是链表尾部,head指向链表头部)。

代码

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

/**
  * 
  * @param head ListNode类 
  * @return ListNode类
  */
function deleteDuplicates( head ) {
    //判断链表是否为空
    if(!head) return null;
    //链表中元素有序,每次判断当前指针和下一指针指向的元素内容是否相同
    let p = head;
    while(p.next) {
        //相同则删除下一元素直到出现新元素
        if(p.val == p.next.val) {
            p.next = p.next.next;
        } else {
            p = p.next;
        }
    }
    return head;
}
module.exports = {
    deleteDuplicates : deleteDuplicates
};

猜你喜欢

转载自blog.csdn.net/qq_42101569/article/details/126480954
今日推荐