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

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

例如,链表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;
    }
}

 

版权声明:本文为qyf2199原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/qyf2199/p/12315981.html