删除链表中重复的结点

//思路:
//1->2->2->3
//删除重复元素后 1->3
//1->2->2
//删除重复元素后 1
public ListNode deleteDuplication(ListNode pHead) {
    if(pHead==null || pHead.next==null){
        return pHead;
    }
    //设置虚拟头结点
    ListNode dummyHead = new ListNode(-1);
    dummyHead.next = pHead;

    ListNode pre = dummyHead;
    ListNode cur = pHead;

    //pHead 链表至少有 1 个节点,cur 不为 null
    while(cur.next!=null){
        if(cur.val!=cur.next.val){ //相邻元素的值不相同,但是还不能说明 cur 不是重复元素,需要进一步判断
            if(pre.next==cur){ // cur 不是重复元素
                pre = cur;
            }else{ //是重复元素删除
                pre.next = cur.next;
            }
        }
        cur = cur.next;
    }

    if(pre.next!=cur){ //针对:1->2->2 这种情况
        pre.next =null;
    }

    return dummyHead.next;
}

https://www.mianshi.onlinehttps://www.i9code.cn

本文由博客一文多发平台 OpenWrite 发布!

逃跑的眼镜_bvbEK5
7 声望0 粉丝