leetcode题解-82. Remove Duplicates from Sorted List II

来源:互联网 发布:C语言下列叙述错误的是 编辑:程序博客网 时间:2024/06/06 21:42

题意:本题是83题(Remove Duplicates from Sorted List)的拓展,这次重复的元素一个都不保留。

例子:
给定链表 1->2->3->3->4->4->5, 返回链表 1->2->5.
给定链表 1->1->1->2->3, 返回链表 2->3.

思路:道理还是和83题一样,只是现在要把前驱指针指向上一个不重复的元素中,如果找到不重复元素,则把前驱指针指向该元素,否则删除此元素。算法只需要一遍扫描,时间复杂度是O(n),空间只需要几个辅助指针,是O(1)。代码如下

/** * Definition for singly-linked list. * public class ListNode { *     int val; *     ListNode next; *     ListNode(int x) { val = x; } * } */class Solution {    public ListNode deleteDuplicates(ListNode head) {        if(head == null) return null;        ListNode fakeHead = new ListNode(0);         fakeHead.next = head;        ListNode left = fakeHead;        ListNode right = head;        while(right != null){            while(right.next != null && right.val == right.next.val){                right = right.next;            }            if(left.next == right){                left = right;            }else{                left.next = right.next;            }            right = right.next;        }        return fakeHead.next;    }}
原创粉丝点击