Leetcode 83. Remove Duplicates from Sorted List

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.

题意:有一个含有重复元素的升序链表,重复的元素只保留一个,返回去重后的升序链表。

思路:这道题和Remove Duplicates from Sorted Array很类似,我们还是可以用两个指针,一个指针pre指向当前已去重排序好的位置,一个指针dummy遍历链表。每次遍历比较pre和dummy的值,如果不相等,证明dummy是pre之后不重复的升序值,可以将pre.next连接到dummy,此时从头到dummy这部分就是已去重的升序链表了,所以再把pre指向dummy;如果相等,证明pre到dummy这部分都相等,继续遍历,期待找到下一个不相等的值。

public ListNode deleteDuplicates(ListNode head) {
    if (head == null || head.next == null) {
        return head;
    }

    ListNode pre = head;
    ListNode dummy = head.next;
    while (dummy != null) {
        if (pre.val != dummy.val) {
            pre.next = dummy;
            pre = dummy;
        }
        dummy = dummy.next;
    }
    pre.next = null;

    return head;
}

bug:自己最后少写了pre.next = null这步,这会导致在1->2->3->3这样的case下,返回的结果还是1->2->3->3。因为我们只能保证从头到pre是去重排序好的,所以最后需要把pre.next置为null。

你可能感兴趣的:(Leetcode 83. Remove Duplicates from Sorted List)