剑指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;
    }
}
全部评论

相关推荐

每晚夜里独自颤抖:把华北改为华南再试一试,应该就没啥问题了。改完可能都不用投,别人主动联系了。
点赞 评论 收藏
分享
05-09 13:22
门头沟学院 Java
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务