题目链接:https://www.nowcoder.com/practice/fc533c45b73a41b0b44ccba763f866ef?tpId=13&&tqId=11209&rp=1&ru=/ta/coding-interviews&qru=/ta/coding-interviews/question-ranking

  首先创建一个新的结点,指向链表的头结点,此时这个结点就变成这个链表的头结点,设置两个结点 p 和 q,分别指向头结点和头结点的下一个结点,解法看图解。
图片说明

/*
 public class ListNode {
    int val;
    ListNode next = null;

    ListNode(int val) {
        this.val = val;
    }
}
*/
public class Solution {
    public ListNode deleteDuplication(ListNode pHead) {
        if(pHead == null) return null;
        ListNode newNode = new ListNode(-1);
        newNode.next = pHead;
        ListNode p = newNode, q = pHead;
        while(q != null) {
            if(q.next != null && q.val == q.next.val) {
                while(q.next != null && q.val == q.next.val) {
                    q = q.next;
                }
                q = q.next;
                p.next = q;
            } else {
                p = q;
                q = q.next;
            }
        }
        return newNode.next;
    }
}