每天一道剑指offer-删除链表中的 重复结点

题目描述

在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针。 例如,链表1->2->3->3->4->4->5 处理后为 1->2->5

思路

创建一个头指针,用于返回结果,然后在创建两个链表,一个是指向当前结点的值,一个是删除链表重复元素的值,指向确定不重复的结点。

注意特殊情况,比如链表中结点全重复,为空等

代码

public ListNode deleteDuplication(ListNode pHead){
        if (pHead==null || pHead.next==null){
            return pHead;
        }
        ListNode gard = new ListNode(-1);
        gard.next = pHead;
        ListNode pre = gard;
        ListNode curr = pHead;
        while(curr!=null && curr.next!=null){
            if(curr.val == curr.next.val){
                int value = curr.val;
                while(curr.next!=null && curr.next.val == value){
                    curr = curr.next;
                }
                curr = curr.next;
                pre.next = curr;
            }
            else{
                pre = pre.next;
                curr = curr.next;
            }
        }
        return gard.next;
    }

猜你喜欢

转载自blog.csdn.net/weixin_42069523/article/details/88724604