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
.
Source
<span style="font-size:14px;">/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
public ListNode deleteDuplicates(ListNode head) {
ListNode p = head;
ListNode q = p;
while(p != null){
q = p;
while(p.next != null && p.next.val == p.val){ //凡是指针后移,要习惯性写边界判断
p = p.next;
}
q.next = p.next;
p = q.next;
}
return head;
}
}</span>
Test
public static void main(String[] args){
ListNode a = new ListNode(1);
a.next = new ListNode(1);
a.next.next = new ListNode(2);
a.next.next.next = new ListNode(3);
a.next.next.next.next = new ListNode(3);
a.next.next.next.next.next = new ListNode(3);
ListNode b = new Solution().deleteDuplicates(a);
while(b != null){
System.out.print(b.val + " ");
b = b.next;
}
}