最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

c++算法進階刪除有序鏈表中的重復(fù)元素

 更新時間:2023年12月06日 11:22:48   作者:吳尼瑪  
這篇文章主要為大家介紹了c++算法進階刪除有序鏈表中的重復(fù)元素示例,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

題目

給出一個升序排序的鏈表,刪除鏈表中的所有重復(fù)出現(xiàn)的元素,只保留原鏈表中只出現(xiàn)一次的元素。

例如:

給出的鏈表為1→2→3→3→4→4→5, 返回1→2→5。

給出的鏈表為1→1→1→2→3, 返回2→3。

數(shù)據(jù)范圍:鏈表長度0≤n≤10000,鏈表中的值滿足∣val∣≤1000

要求:空間復(fù)雜度O(n),時間復(fù)雜度O(n)

進階:空間復(fù)雜度O(1),時間復(fù)雜度O(n)

示例

示例1

輸入:
{1,2,2}
返回值:
{1}

示例2

輸入:
{}
返回值:
{}

思路

因為是升序的鏈表,重復(fù)的元素時連在一起的,所以可以連續(xù)的跳過相同的節(jié)點。

這里有個小技巧:因為鏈表有可能前幾個元素就是重復(fù)的,這時就需要刪除頭指針了,所以我們需要給鏈表增加一個自定義的表頭,以方便后面刪除了原來的頭指針而找不到表頭,還有需要注意的就是在返回的時候要去掉增加的表頭。

這種解法的空間復(fù)雜度是O(1),另外也可以通過哈希表unordered_map來記錄每個節(jié)點值出現(xiàn)的次數(shù)來解決這個問題。哈希表的方式空間復(fù)雜度就是O(n)了,如果鏈表的無序的,則哈希表的解決方法更通用。

解答代碼

/**
 * struct ListNode {
 *    int val;
 *    struct ListNode *next;
 *    ListNode(int x) : val(x), next(nullptr) {}
 * };
 */
class Solution {
public:
    /**
     * @param head ListNode類 
     * @return ListNode類
     */
    ListNode* deleteDuplicates(ListNode* head) {
        // write code here
        if (head == nullptr) {
            return nullptr;
        }
        // 給鏈表增加一個表頭,以便可以刪除原鏈表的頭結(jié)點。
        auto res = new ListNode(0);
        res->next = head;
        auto cur = res;
        while (cur->next != nullptr && cur->next->next != nullptr) {
            if (cur->next->val == cur->next->next->val) {
                int val = cur->next->val;
                // 跳過所有相同的值
                while (cur->next != nullptr && cur->next->val == val) {
                    cur->next = cur->next->next;
                }
            } else {
                cur = cur->next;
            }
        }
        // 返回值需要去掉增加的表頭
        return res->next;
    }
};

以上就是c++算法進階刪除有序鏈表中的重復(fù)元素的詳細內(nèi)容,更多關(guān)于c++刪除有序鏈表重復(fù)元素的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++ STL 四種智能指針的用法詳解

    C++ STL 四種智能指針的用法詳解

    C++ 標準模板庫 STL(Standard Template Library) 一共給我們提供了四種智能指針:auto_ptr、unique_ptr、shared_ptr 和 weak_ptr,今天給大家詳細介紹這幾種指針的具體用法,需要的朋友參考下吧
    2021-06-06
  • C++ 整數(shù)拆分方法詳解

    C++ 整數(shù)拆分方法詳解

    整數(shù)拆分,指把一個整數(shù)分解成若干個整數(shù)的和。本文重點給大家介紹C++ 整數(shù)拆分方法詳解,非常不錯,感興趣的朋友一起學習吧
    2016-08-08
  • Qt6.0+vs2019環(huán)境配置的實現(xiàn)教程

    Qt6.0+vs2019環(huán)境配置的實現(xiàn)教程

    這篇文章主要介紹了Qt6.0+vs2019環(huán)境配置的實現(xiàn)教程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • C語言實現(xiàn)掃雷OvO(完整代碼)

    C語言實現(xiàn)掃雷OvO(完整代碼)

    相信大家都玩過掃雷游戲,因為它太經(jīng)典了,今天我們用C語言來模擬實現(xiàn)掃雷游戲,結(jié)合示例代碼給大家介紹的非常詳細,感興趣的朋友一起看看吧
    2022-04-04
  • C語言采用文本方式和二進制方式打開文件的區(qū)別分析

    C語言采用文本方式和二進制方式打開文件的區(qū)別分析

    這篇文章主要介紹了C語言采用文本方式和二進制方式打開文件的區(qū)別分析,有助于讀者更好的理解文本文件與二進制文件的原理,需要的朋友可以參考下
    2014-07-07
  • C++中的RAII機制詳解

    C++中的RAII機制詳解

    這篇文章主要介紹了C++中的RAII機制詳解,RAII是Resource Acquisition Is Initialization的簡稱,是C++語言的一種管理資源、避免泄漏的慣用法,需要的朋友可以參考下
    2014-09-09
  • C++類與對象之日期類的實現(xiàn)

    C++類與對象之日期類的實現(xiàn)

    這篇文章主要介紹如何實現(xiàn)C++中的日期類相關(guān)資料,需要的朋友可以參考下面文章的具體內(nèi)容
    2021-09-09
  • C++中隱式類型轉(zhuǎn)換學習筆記

    C++中隱式類型轉(zhuǎn)換學習筆記

    在本篇文章里小編給大家整理的是一篇關(guān)于C++中隱式類型轉(zhuǎn)換學習筆記內(nèi)容,有興趣的跟著小編來學習下吧。
    2020-02-02
  • C++廣播通信實例

    C++廣播通信實例

    這篇文章主要介紹了C++實現(xiàn)廣播通信的方法,實例講述了C++ socket廣播通信的原理與實現(xiàn)方法,需要的朋友可以參考下
    2014-10-10
  • 詳解C++標準庫中處理正則表達式的類std::regex

    詳解C++標準庫中處理正則表達式的類std::regex

    std?是?C++?標準庫的命名空間,包含了大量標準的?C++?類、函數(shù)和對象,這些類和函數(shù)提供了廣泛的功能,包括輸入輸出、容器、算法、字符串處理等,這篇文章主要介紹了C++標準庫中提供的用于處理正則表達式的類std::regex,需要的朋友可以參考下
    2024-03-03

最新評論

隆安县| 贵阳市| 临武县| 德昌县| 康马县| 永年县| 仙居县| 稻城县| 资阳市| 高邑县| 祁连县| 梅河口市| 永城市| 古浪县| 宁安市| 广昌县| 博乐市| 靖西县| 桦川县| 江华| 习水县| 湘阴县| 溆浦县| 沙坪坝区| 定结县| 沾化县| 文安县| 遂宁市| 湖口县| 营口市| 玉林市| 新干县| 辽宁省| 南郑县| 杭锦旗| 常德市| 大荔县| 乳山市| 肇州县| 巢湖市| 定陶县|