可視化圖解算法:刪除有序(排序)鏈表中重復的元素-II

1. 題目

描述

給出一個升序排序的鏈表,刪除鏈表中的所有重復出現的元素,只保留原鏈表中只出現一次的元素。 例如: 給出的鏈表為1→2→3→3→4→4→5, 返回1→2→5. 給出的鏈表為1→1→1→2→3 返回2→3.

數據范圍:鏈表長度 0≤n≤100000 ,鏈表中的值滿足 ∣val∣≤1000

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

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

示例1

輸入:

{1,2,2}

返回值:

{1}

示例2

輸入:

{}

返回值:

{}

2. 解題思路

本題要求刪除重復的元素即在鏈表中重復的元素都會被刪除,由于重復的元素也有可能是頭結點,因此需要定義一個鏈表的虛擬頭結點,虛擬頭結點的指針域指向鏈表的頭結點。

假如鏈表結構如下圖所示:

這時可以通過以下步驟完成鏈表重復元素的刪除。

步驟一:定義虛擬頭結點、指針變量。

cur :鏈表節點銜接指針(當前操作的節點);

nxt1:操作的下一個節點;

nxt2 :操作的下下一個節點。

步驟二:循環刪除鏈表的重復節點。

此時,nxt1與nxt2對應的節點值都是1(重復的元素),移動nxt2。

此時,nxt1與nxt2對應的節點值還是1(重復的元素),移動nxt2。

這時,nxt1的節點值是1,nxt2的值是2,需將已經檢查出重復的元素1刪除。刪除重復元素1可以通過更改cur當前節點的指針域,讓它指向nxt2,這樣就可以將多個1節點刪除。

之后再移動nxt1與nxt2,使得nxt1始終指向當前操作節點cur的下一個節點;nxt2始終指向當前操作節點cur的下下一個節點。

ntx1 = cur.next # 下一個節點

ntx2 = cur.next.next # 下下一個節點

此時,nxt1與ntx2對應的節點值都是2(重復的元素),移動nxt2。

這時,nxt1的節點值是2,nxt2的值是3,需將已經檢查出重復的元素2刪除。刪除重復元素2可以通過更改cur當前節點的指針域,讓它指向nxt2,這樣就可以將多個2節點刪除。

之后再移動nxt1與nxt2,這時發現nxt1與nxt2中有一個為Null,循環退出(重復元素刪除完成)。

步驟三:返回鏈表中無重復節點組成的鏈表頭結點。

虛擬頭節點的下一個節點就是需要返回的鏈表頭節點,將其返回。

如果文字描述的不太清楚,你可以參考視頻的詳細講解。

  • Python版本:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1370403

  • Java版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366847

  • Golang版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364604

3. 編碼實現

核心偽代碼如下:

函數 刪除重復節點(頭節點 head) 返回 鏈表節點:如果 head 為空:返回 head//1. 定義虛擬頭結點、指針變量創建虛擬頭節點 tmp_head,值為 -1tmp_head的下一個節點指向 head當前節點 cur 指向 tmp_head//2. 循環刪除鏈表的重復節點當 cur的下一個節點 不為空 且 cur的下一個節點的下一個節點 不為空 時,循環執行:ntx1 = cur的下一個節點ntx2 = cur的下一個節點的下一個節點如果 ntx1的值 == ntx2的值:val = ntx1的值當 ntx2 不為空 且 ntx2的值 == val 時,循環執行:ntx2 = ntx2的下一個節點cur的下一個節點 = ntx2  # 跳過所有重復節點否則:cur = cur的下一個節點  # 移動指針到下一個非重復節點// 3.返回鏈表中無重復節點組成的鏈表頭結點返回 tmp_head的下一個節點  # 返回處理后的鏈表頭節點

具體完整代碼你可以參考下面視頻的詳細講解。

  • Python版本:數據結構筆試面試算法-Python語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Python語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1370403

  • Java版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1366847

  • Golang版本:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1364604

4.小結

本題要求刪除重復的元素即在鏈表中重復的元素都會被刪除,由于重復的元素也有可能是頭結點,因此需要定義一個鏈表的虛擬頭結點,虛擬頭結點的指針域指向鏈表的頭結點。

這時可以通過以下步驟完成鏈表重復元素的刪除。(1)定義虛擬頭結點、指針變量;(2)循環刪除鏈表的重復節點;(3)返回鏈表中無重復節點組成的鏈表頭結點。


《數據結構與算法》深度精講課程正式上線啦!七大核心算法模塊全解析:

? 鏈表 ? 二叉樹 ?二分查找、排序 ? 堆、棧、隊列 ?回溯算法 ? 哈希算法 ? 動態規劃

無論你是備戰筆試面試、提升代碼效率,還是突破技術瓶頸,這套課程都將為你構建扎實的算法思維底座。🔥立即加入學習打卡,與千名開發者共同進階!

  • Python編碼實現:嗶哩嗶哩_bilibilihttps://www.bilibili.com/cheese/play/ep1509965

  • Java編碼實現:數據結構筆試面試算法-Java語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Java語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1510007

  • Golang編碼實現:數據結構筆試面試算法-Go語言版_嗶哩嗶哩_bilibili數據結構筆試面試算法-Go語言版,bilibili課堂,嗶哩嗶哩課堂,嗶哩嗶哩,Bilibili,B站,彈幕https://www.bilibili.com/cheese/play/ep1509945

對于鏈表的相關操作,我們總結了一套【可視化+圖解】方法,依據此方法來解決鏈表相關問題,鏈表操作變得易于理解,寫出來的代碼可讀性高也不容易出錯。具體也可以參考視頻詳細講解。

今日佳句:千淘萬漉雖辛苦,吹盡狂沙始到金。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73613.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73613.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73613.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【leetcode刷題日記】lc.53-最大子數組和

目錄 1.題目 2.代碼 1.題目 給你一個整數數組 nums ,請你找出一個具有最大和的連續子數組(子數組最少包含一個元素),返回其最大和。 子數組是數組中的一個連續部分。 示例 1: 輸入:nums [-2,1,-3,4,-…

樹莓派超全系列文檔--(7)RaspberryOS播放音頻和視頻

播放音頻和視頻 播放音頻和視頻VLC 媒體播放器vlc GUIvlc CLI使用 cvlc 在沒有圖形用戶界面的情況下播放媒體 在 Raspberry Pi OS Lite 上播放音頻和視頻指定音頻輸出設備指定視頻輸出設備同時指定音頻和視頻輸出設備提高數據流播放性能 文章來源: http://raspberr…

算法250327題目

1114: 4006 AB問題 題目描述 給定兩個整數A和B,其表示形式是:從個位開始,每三位數用逗號,隔開。 現在請計算AB的結果,并以正常形式輸出。 輸入 輸入包含多組數據,每組數據占一行,由兩個整數A和B組成&am…

Wireshark學習

Wireshark簡介 抓包前 1.打開wireshark得到下面的界面 2.選擇菜單欄上捕獲-> 選項,勾選WLAN網卡(這里需要根據各自電腦網卡使用情況選擇,簡單的辦法可以看使用的IP對應的網卡)。點擊開始。啟動抓包。 3.wireshark啟動后&am…

[OS_4] 數學視角 | 多狀態 | 模型檢查器 | 程序驗證(math)

程序 狀態機 gdb 單步執行 狀態遷移 狀態里有什么?gdb 可以打印有一些特殊的狀態遷移 硬件 狀態機 指令執行 狀態遷移 從 CPU Reset 開始執行 FirmwareFirmware 加載操作系統 (程序) 操作系統 狀態機 (毫無疑問) 程序是一種真正意義上的 “數學嚴格” 的…

互聯網的“神經中樞”域名根服務器是如何演變的?

互聯網如同一條隱形的紐帶,將全球數十億人的生活和工作緊密相連。而在這龐大的網絡體系中,域名根服務器則是支撐其平穩運行的“神經中樞”。那么域名根服務器是如何演變的呢? 一、域名根服務器互聯網的“地址簿” 想象一下,當你…

【sylar-webserver】6 IO協程調度模塊

文章目錄 設計知識點 設計 IO協程調度模塊,整個項目里最重要的模塊~ 和 協程調度模塊 相比,增加了 IO 事件的 觸發條件。 所以需要重新封裝 Event 事件, 通過 epoll_wait 監測觸發事件(重新實現了idle),…

6.2、認證主要產品與應用

目錄 認證主要產品認證產品主要技術指標認證技術應用認證技術應用 - 校園網應用認證技術應用 - 網絡路由認證認證技術應用 - 用戶登錄設備認證技術應用 - 人臉識別門禁與eID 認證主要產品 應用認證產品主要形態有三種,硬件模式、軟件模式和軟硬相結合。硬件比如說認…

一套SaaS多租戶醫療云his源碼,基于云計算的醫院信息管理系統(云HIS)

基于云計算的醫院信息管理系統(云HIS),通過SaaS服務模式提供。這種云HIS系統設計考慮了模板化、配置化、智能化和可擴展性,覆蓋了基層醫療機構的核心工作流程,并且能夠與監管系統無縫對接,滿足未來的擴展需…

人工智能技術全景圖譜:從基礎理論到前沿應用

人工智能技術全景圖譜:從基礎理論到前沿應用 一、AI發展歷程與學科體系 1.1 人工智能三大學派 符號主義(Symbolicism) 邏輯推理:一階謂詞邏輯知識表示:語義網絡、框架系統 連接主義(Connectionism&#…

基于杜鵑鳥鯰魚優化(Cuckoo Catfish Optimizer,CCO)算法的多個無人機協同路徑規劃(可以自定義無人機數量及起始點),MATLAB代碼

一、杜鵑鳥鯰魚優化算法 杜鵑鳥鯰魚優化(Cuckoo Catfish Optimizer,CCO)算法模擬了杜鵑鳥鯰魚的搜索、捕食和寄生慈鯛行為。該算法的早期迭代側重于執行多維包絡搜索策略和壓縮空間策略,并結合輔助搜索策略來有效限制慈鰾的逃逸空…

FPGA_DDS_IP核

接下來對FPGA的DDS的ip核進行學習。 首先對DDS需要有些了解 DDS信號發生器采用直接數字頻率合成(Direct Digital Synthesis,簡稱DDS)技術,簡單來說就是 需要一個系統頻率和一個輸入的數字數據 ,用這個系統頻率計算出…

dbeaver連接mongodb 插入日期變成了字符串

dbeaver插入mongodb數據 日期默認使用ISODate處理,但是插入數據以后實際上是ISODate(2025-03-03T03:25:19.640Z)字符串 INSERT INTO xxx.aaa (_id, chatId, buddyId, pId, lastChatId, inspiration, createTime, modelType, version, selectedInspiration, _class)…

微服務管理 - NACOS學習

為什么了解,工作中會使用這個工具進行微服務管理。 入門介紹: Nacos 是阿里巴巴開源的一款專注于動態服務發現、配置管理和服務管理的平臺,主要用于簡化云原生應用架構中的微服務開發與運維。它幫助開發者實現服務的自動注冊與發現、實時配置…

外貿獨立站相關知識掃盲

常見的外貿獨立站類型 B2B外貿獨立站:主要面向企業客戶,展示公司產品、服務和解決方案,促進企業間貿易。例如,使用WordPress搭建的B2B外貿獨立站,可以靈活展示產品信息、發布行業資訊、提供在線詢盤功能等。 B2C外貿…

libpng-1.6.47-windows編譯

本文操作按照《c&c開源庫編譯指南》中內容規范編寫,編譯環境配置、工具下載、目錄規劃,及更多其他開源庫編譯方法請參考該文章。 c&c開源庫編譯指南:https://blog.csdn.net/binary0006/article/details/144086155 本文章中的源代碼已…

[250324] Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft!| Wine 10.4 發布!

目錄 Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft!Wine 10.4 發布! Kafka 4.0.0 版本發布:告別 ZooKeeper,擁抱 KRaft! 近日,Apache Kafka 4.0.0 正式發布!這是一個…

linux安裝配置Nacos

環境:centos7、mysql8.0、nacos2.5.1 1.下載Nacos安裝包 https://github.com/alibaba/nacos/releases?spm5238cd80.72a042d5.0.0.46bacd36C42EfG 我這邊選的是最新的穩定版本2.5.1 2. 放到 linux 服務器中解壓安裝 解壓 tar -xvf nacos-server-2.5.1.tar.gz 進入…

元宇宙浪潮下,數字孿生如何“乘風破浪”?

在當今科技飛速發展的時代,元宇宙的概念如同一顆璀璨的新星,吸引了全球的目光。元宇宙被描繪為一個平行于現實世界、又與現實世界相互影響且始終在線的虛擬空間,它整合了多種前沿技術,為人們帶來沉浸式的交互體驗。而數字孿生&…

[Effective C++]條款24:若所有參數皆需類型轉換,請為此采用non-menber函數

. 1、操作符重載&隱式類型轉換 C中,操作符重載可以通過成員函數或非成員函數來實現。當操作符重載是成員函數時,左操作數必須是該類的對象。如果左操作數不是該類的對象,而是需要進行隱式轉換的類型,編譯器將無法找到匹配的成…