//Three pointer approach that we use in in-place reversal of linked list.

class Solution {

    public ListNode deleteDuplicates(ListNode head) {
        ListNode p = null;
        ListNode q = null;
        ListNode r = head;
        while (r != null) {
            if (q != null && q.val == r.val) {
                r = r.next;
                q.next = r;
            } else {
                p = q;
                q = r;
                r = r.next;
            }
        }
        return head;
    }
}