删除链表中的重复元素

来源:互联网 发布:航天证券交易软件 编辑:程序博客网 时间:2024/05/01 18:13

题目:在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 

例如,链表1->2->3->3->4->4->5 处理后为 1->2->5


public ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead==null){
            return pHead;
        }
        ListNode G=new ListNode(0);
        G.next=pHead;
        ListNode cur=G;//为了保存新的链表的头指针以便于返回
        ListNode pre=pHead;
        while(pre!=null){
            boolean flage=false;
            //该步骤是为了找出重复的元素,并且删除重复的元素到只剩下一个
            while(pre.next!=null&&pre.val==pre.next.val){//用while循环是因为有重复的次数可能不只1次
                flage=true;//说明是重复的元素
                pre=pre.next;//把后面的一个元素覆盖前面一个元素
            }
            //删除剩下的那一个重复的元素,并且跳过之后的步骤
            if(flage){
                pre=pre.next;//把后面的一个元素覆盖前面一个
                continue;
            }
            //该部分为不存在重复的情况
            cur.next=pre;
            cur=cur.next;
            pre=pre.next;
        }
        cur.next=null;//将链表的最后置为空
        return G.next;//
    }


原创粉丝点击