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
.
Source
/**
* 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 st = new ListNode(0);
if(head == null || head.next == null)
return head;
st.next = head;
ListNode p = head, q = head.next, k = st;
boolean flag = false;
while(q != null){
flag = false;
while(q != null && q.val == p.val){ //有指针后移的语句就要加判断是否为空
flag = true;
q = q.next;
}
if(flag == true){
k.next = q;
if(q == null) return st.next; //一串字符全一样
p = k.next;
q = p.next;
}
else{
p = p.next;
q = q.next;
k = k.next;
}
}
return st.next; //不要return head 因为head指向的结点本身或是后继有可能变了
}
}
Test
public static void main(String[] args){
ListNode a = new ListNode(2);
a.next = new ListNode(2);
a.next.next = new ListNode(2);
a.next.next.next = new ListNode(2);
a.next.next.next.next = new ListNode(5);
ListNode b = new Solution().deleteDuplicates(a);
while(b != null){
System.out.println(b.val);
b = b.next;
}
}