1. 题目
2. 分析
如果当前节点有重复,则将当前节点和后面重复的节点全部删除。 我们可以通过多个指针,一次遍历删除
-
首先定义出前置节点
-
发现next重复,将next一直指向到null或者不相等
-
将pre的next指向next,head移动到next位置
-
发现next与head不相等,将pre后移,head后移
3. 代码
public ListNode deleteDuplicates(ListNode head) {
if (null == head) {
return head;
}
ListNode newHead = new ListNode(0);
newHead.next = head;
ListNode pre = newHead;
ListNode next;

while (null != head) {
next = head.next;
if (null != next && next.val == head.val) {
while (next!= null && next.val == head.val) {
next = next.next;
}
pre.next = next;
head = next;
} else {
pre = head;
head = next;
}
}
return newHead.next;
}