[Leetcode 5] 83 Remove Duplicates from Sorted List

Problem:

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.

 

Analysis:

It's similar to the remove duplicates from sorted array problem. Use pointers ptrA and ptrB. ptrA always points to the last position of non-duplicated list and ptrB go through the list. One important thing is that we need a third point always points to the previous position of ptrB to delete duplicates. The third pointer can ensure that those duplicated nodes have no reference point to them and thus can be GC cleaned as soon as possible.

The time complexity is O(n) and the space complexity is O(n)

 

Code:

复制代码
/**
 * 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) {
        // Start typing your Java solution below
        // DO NOT write main() function
        if (head == null) return null;
        
        ListNode cur=head, valid=head, prev=null;
        
        while (cur.next != null) {
            prev = cur;
            cur = cur.next;
            if (cur.val != valid.val) {
                if (prev.val == valid.val) prev.next=null;
                valid.next = cur;
                valid = cur;
            } else {
              prev.next = null;
            }
        }
        
        return head;
    }
}
复制代码

Attention:

To access Java field, use . not ->

posted on   freeneng  阅读(169)  评论(0)    收藏  举报

努力加载评论中...

导航

点击右上角即可分享
微信分享提示