zoukankan      html  css  js  c++  java
  • 82. Remove Duplicates from Sorted List II

    82. Remove Duplicates from Sorted List II

    Given a sorted linked list, delete all nodes that have duplicate numbers, leaving only distinct numbers from the original list.

    Example 1:

    Input: 1->2->3->3->4->4->5
    Output: 1->2->5
    

    Example 2:

    Input: 1->1->1->2->3
    Output: 2->3

    My hints: 
            Fist come to my mind is the hash,but if the hash can be use directly in c++
            if we can use hash ,then compute the nodes which apearance exceed twice,the time is 2n,and the space is hash。。
            oh my gold,i realised that the number is progressive increase!
            It's simple,just have two more ListNode and traverse the List one time can solve the problem
            
    best solution reference:https://leetcode.com/problems/remove-duplicates-from-sorted-list-ii/discuss/153511/C++-concise-one-pass-solution
    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode(int x) : val(x), next(NULL) {}
     * };
     */
    class Solution {
    public:
        ListNode* deleteDuplicates(ListNode* head) {
           
            if(head == NULL || head->next == NULL) return head; // List is null or have only one node
            ListNode *dummy = new ListNode(head->val - 1);      //add a node to deal with the first bode in original list more conveniently
            dummy->next = head;
            ListNode *p = dummy;
            while(p != NULL && p->next != NULL) {              //traverse the list node
                ListNode *pnex = p->next;                      
                if(pnex->next != NULL && pnex->next->val == pnex->val) {
                    while(pnex->next != NULL && pnex->next->val == pnex->val) {
                        ListNode *tmp = pnex->next;
                        pnex->next = tmp->next;
                        delete tmp;
                    }
                    p->next = pnex->next;
                    delete pnex;
                }
                else
                    p = p->next;
            }
            head = dummy->next;
            delete dummy;
            return head;
            
        }
    };
  • 相关阅读:
    Fescar Quick Start
    Fescar Example-Spring Cloud
    IntelliJ IDEA 如何生成时序图?
    git 出现 fatal: refusing to merge unrelated histories 错误
    蘑菇街支付架构 PDF 下载
    优点缺点
    转 CentOS下php安装mcrypt扩展
    转 安装php时报gd相关的错误(gd_ctx.c)
    转 安装PHP出现make: *** [sapi/cli/php] Error 1 解决办法
    转 CentOS开启FTP及配置用户
  • 原文地址:https://www.cnblogs.com/hozhangel/p/9460730.html
Copyright © 2011-2022 走看看