LeetCodeブラシ問題記録Remove Duplicates from Sorted List II


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 .
基本的な二重ポインタ問題は、実現時の細部に注意すればいい.ポイントは、2つの連続要素が等しくないことと等しいことの処理方法が異なることです.
/**
 * 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 dummyHead = new ListNode(-1);
        dummyHead.next = head;
        ListNode p = dummyHead;
        ListNode q = dummyHead;
        while(p.next != null){
            q = p.next;
            if(q.next == null){
                if(p.next == q){
                    break;
                }
                else{
                    p.next = null;
                    break;
                }
            }
            if(q.next.val != q.val){
                p = q;
                continue;
            }
            else{
                while(q.next != null && q.next.val == q.val)
                    q = q.next;
                p.next = q.next;
            }
        }
        
        return dummyHead.next;
    }
}