首先创建一个新的结点,指向链表的头结点,此时这个结点就变成这个链表的头结点,设置两个结点 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; } }