题目描述
删除给出链表中的重复元素(链表中元素从小到大有序),使链表中的所有元素都只出现一次
例如:
给出的链表为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
};