题目:
给定一个已排序的链表的头 head
, 删除所有重复的元素,使每个元素只出现一次 。返回 已排序的链表 。
思路:
要求删除重复元素,要想判断重复元素一个引用(prev)就不够用,所以需要在引用一个指针(cur)才能判断出元素时候重复。prev.next == cur.next
动态图解:
代码:
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
//只有一个节点或者为空
return head;
}
ListNode prev = head;
ListNode cur = prev.next;
while (cur != null) {
if (prev.val != cur.val) {
prev = prev.next;
cur = cur.next;
} else {
while (cur != null && prev.val == cur.val) {
//不相等两个指针同时向后走一步
cur = cur.next;
}
prev.next = cur;
prev = prev.next;
}
}
return head;
}
进阶-递归法:
public ListNode deleteDuplicates(ListNode head) {
if (head == null || head.next == null) {
//只有一个节点或者为空
return head;
}
head.next = deleteDuplicates(head.next);
if (head.val == head.next.val) {
return head.next;
}
return head;
}