直接删除法

public class Solution {

public ListNode deleteDuplication(ListNode pHead) {
    if(pHead==null)
        return null;
    //方法一:直接删除法,自己写的,比较冗余,比官方解法确实复杂了些
    ListNode vHead = new ListNode(0);
    vHead.next = pHead;
    ListNode pre = vHead;
    ListNode cur = pHead;
    while(cur!=null){
        boolean Flag = true;
        if(cur.next!=null && cur.val==cur.next.val){
            ListNode suc = cur.next;
            //找到下一个比cur结点值大的结点,pre指向该结点
            boolean flag = true;//判断状态有没有改变
            while(suc!=null){
                if(suc.val>cur.val){
                    pre.next = suc;
                    cur = suc;
                    flag = false;
                    Flag = false;
                    break;
                }
                suc = suc.next;
            }
            if(flag){ //flag为true,说明后面结点的值没有大于cur结点的值
                pre.next = null;
                break;
            }
        }
        
        if(Flag){
            pre = cur;
            cur = cur.next;
        }
            
    }
    return vHead.next;
    
    //方法二:官方解法(java模仿)
    ListNode vHead = new ListNode(0);
    vHead.next = pHead;
    ListNode pre = vHead;
    ListNode cur = pHead;
    while(cur!=null){
        if(cur.next!=null && cur.val==cur.next.val){
            cur = cur.next;
            while(cur.next!=null && cur.val==cur.next.val)
                cur = cur.next;
            cur = cur.next;
            pre.next = cur;
        } else {
            pre = cur;
            cur = cur.next;
        }
    }
    return vHead.next;
    
}

}