解题思路:
1.首先定义虚拟节点dummy,dummy的下一个节点指向head节点。
2.定义辅助节点cur指向dummy节点
3.开始遍历链表,如果当前节点cur的下一个节点和下下一个节点都不为空的情况下,对cur的下一个节点和下下一个节点的值进行判断。
4.如果当前节点cur的下一个节点和下下一个节点的val值相等,则删除cur的下一个节点,使得cur的下一个节点指向cur的下下个节点。
5.重复第4步,直至cur的下一个节点和下下一个节点的val值不相等,此时cur节点前进。
代码实现:
public ListNode deleteDuplicates(ListNode head) {
if (head == null) {
return head;
}
ListNode dummy = new ListNode(0, head);
ListNode cur = dummy;
while (cur.next != null && cur.next.next != null) {
if (cur.next.val == cur.next.next.val) {
int x = cur.next.val;
while (cur.next != null && cur.next.val == x) {
cur.next = cur.next.next;
}
} else {
cur = cur.next;
}
}
return dummy.next;
}
官方题解:LeetCode官方题解