其他分享
首页 > 其他分享> > 删除排序链表中的重复元素 II

删除排序链表中的重复元素 II

作者:互联网

力扣icon-default.png?t=L892https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list-ii/

存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。

返回同样按升序排列的结果链表。

 

var deleteDuplicates = function(head) {

    //定义一个虚拟节点
    let dummyHead=new ListNode(-1)
    //虚拟节点指向链表头部
    dummyHead.next=head
    //定义一个遍历的指针,初始指向虚拟节点
    let p=dummyHead
     
    while(p){

        //判空中断
        if(!p.next || !p.next.next){
            break
        }
        //指针后面的两个相邻元素相等,说明有重复元素,需要进行操作
        if(p.next.val===p.next.next.val){
           //首先把当前节点存下来
           let now = p

           //p指针往下滑动,直到跳过相等元素,或者到链表尾部
           while(p.next.next && p.next.next.val===p.next.val){
              p=p.next
           }
           
           //取得重复元素后面的第一个节点
           let head = p.next.next
           //当前节点指向后面的节点,这样就把重复片段删除掉了
           now.next=head
           //此时注意,p要重新指向当前节点
           p = now

        }else{
            //指针后面的两个相邻元素不等,指针向下滑动
            p=p.next
        }   
    }
    //最后返回
    return dummyHead.next
};

 

标签:II,head,dummyHead,val,next,链表,排序,节点
来源: https://blog.csdn.net/cctvcqupt/article/details/120525423