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.
public ListNode deleteDuplicates(ListNode head) {
if(head == null || head.next == null)
return head;
ListNode p = head,q = head.next; //p记录无重复的链表,q记录处理的下一个节点
while(q != null){
if(p.val != q.val){ //没有重复
p.next = q;
p = q;
}
q = q.next;
}
p.next = q;
return head;
}
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.
public ListNode deleteDuplicates(ListNode head) {
if(head == null) return head;
ListNode fakehead = new ListNode(0), cur = head,pre = fakehead;
fakehead.next = head;
while(cur != null && cur.next != null){
if(cur.next.val == cur.val){ //去重复
ListNode t = cur.next.next;
while(t != null && t.val == cur.val){
t = t.next;
}
cur = t;
}
else{ //没有重复
pre.next = cur;
pre = cur;
cur = cur.next;
}
}
pre.next = cur;
return fakehead.next;
}