剑指offer刷题笔记

非 Y 不嫁゛ 提交于 2020-02-16 11:05:58

删除链表中重复的结点:较难

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

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

public class Solution {
    public ListNode deleteDuplication(ListNode pHead)
    {
        if(pHead==null||pHead.next==null)return pHead;
        ListNode p0=new ListNode(-2147483648);//构造前站节点来防止第一个节点被删除的惨剧
        ListNode p1=p0;
        ListNode p2=pHead;
        int temp=pHead.val;
        int dup=0;//dup==1表示有重复
        while (p2.next!=null){//循环外还有处理?
            if(p2.next.val==temp){
                dup=1;
                p2=p2.next;//
            }
            else{
                if (dup==0){
                    p1.next=p2;
                    p1=p1.next;
                }
                dup=0;
                temp=p2.next.val;
                p2=p2.next;
            }
        }
        if (dup==0)p1.next=p2;
        if (dup==1)p1.next=null;//p1每次接收都是后面一串
        
        p0=p0.next;//过河拆桥,去掉头部哨兵
        return p0;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!