剑指offer 18.1 删除链表中重复的结点

巧妙利用自建的pre指针指向链表,cur循环至重复元素的最后一个,再利用位于重复元素前的pre和cur.next将重复元素全部删除。因为删除的包含cur本身,所以新建的pre非常重要!

public class Solution {
    public ListNode deleteDuplication(ListNode pHead){
        if(pHead==null||pHead.next==null)//必须要先写pHead再写pHead.next 要不然会指针错误!!
            return pHead;
        ListNode pre=new ListNode(Integer.MIN_VALUE);
        ListNode temp=pre;
        pre.next=pHead;
        ListNode cur=pHead;
        while(cur!=null){
            if(cur.next!=null&&cur.val==cur.next.val){
                while(cur.next!=null&&cur.val==cur.next.val){
                    cur=cur.next;
                }
                cur=cur.next;
                pre.next=cur;
            }
            else{
                cur=cur.next;
                pre=pre.next;
            }
        }
        return temp.next;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务