Given a sorted linked list, delete all duplicates such that each element appear only once.
For example,
Given 1->1->2
, return 1->2
.
Given 1->1->2->3->3
, return 1->2->3
.
two pointers start end
当元素重复end=end.next
不重复时start=end
然后遍历一次链表 当end!=start的时候删掉end和start中间的节点
public ListNode deleteDuplicates(ListNode head) {
if(head==null){
return null;
}
if(head.next==null){
return head;
}
ListNode start=head;
ListNode end=head;
while(start!=null){
while(end!=null&&start.val==end.val){
end=end.next;
}
if(end==null){
delete(start,null);
return head;
}
delete(start,end);
start=end;
}
return head;
}
public void delete(ListNode start,ListNode end){
if(start==null||start.equals(end)){
return;
}
if(end==null){
start.next=null;
}
start.next=end;
return;
}