Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.
For example,
Given 1->2->3->3->4->4->5
, return 1->2->5
.
Given 1->1->1->2->3
, return 2->3
.
三个指针,一个指向最后一个不重复的元素,cur指向重复元素的第一个位置, next遍历指向与cur不想等的第一个元素。
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
if(head == null) return null;
ListNode dummy = new ListNode(0);
dummy.next = head;
ListNode last = dummy, cur = head, next = head.next;
while(next != null){
if(next.val != cur.val){
if(cur.next != next){
last.next = next;
cur = next;
}else{
last = cur;
cur = next;
}
}
next = next.next;
}
if(cur.next!=null) last.next = null;
return dummy.next;
}
}
O(N) 时间复杂度, O(1) 空间复杂度。