美文网首页
LintCode:删除排序链表中的重复数字 II

LintCode:删除排序链表中的重复数字 II

作者: VickyShen | 来源:发表于2019-03-11 20:08 被阅读0次

    描述:

    给定一个排序链表,删除所有重复的元素只留下原链表中没有重复的元素。

    样例

    给出 1->2->3->3->4->4->5->null,返回 1->2->5->null
    给出 1->1->1->2->3->null,返回 2->3->null

    思路

    • 由于链表的开头可能有重复项,而最终还需要返回链表的头指针,所以需要定义新链表,设置一个初始节点。
    • 由于需要比较前后值,判定重复,所以需要一个前驱指针,采用慢指针的方式实现,慢指针始终比现节点慢一步
      -遍历整个链表,当前的值不等于前驱节点的值和后继节点的值,则将该值加入新链表中。
        public static ListNode deleteDuplicates(ListNode head) {
            ListNode dump = head;
            ListNode newHead = new ListNode(0);
            ListNode result = newHead;
            if (head == null || head.next == null) {
                return head;
            }
            while (head != null && head.next != null) {
                if (head.val != head.next.val && (head == dump || head.val != dump.val)) {
                    newHead.next = new ListNode(head.val);
                    newHead = newHead.next;
                }
                if (dump != head) {
                    dump = dump.next;
                }
                head = head.next;
            }
            if (head.next==null&&head.val!=dump.val){
                newHead.next=new ListNode(head.val);
            }
            return result.next;
        }
    

    相关文章

      网友评论

          本文标题:LintCode:删除排序链表中的重复数字 II

          本文链接:https://www.haomeiwen.com/subject/sakipqtx.html