一区二区三区三上|欧美在线视频五区|国产午夜无码在线观看视频|亚洲国产裸体网站|无码成年人影视|亚洲AV亚洲AV|成人开心激情五月|欧美性爱内射视频|超碰人人干人人上|一区二区无码三区亚洲人区久久精品

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

淺析LeetCode 83刪除排序鏈表中的重復(fù)元素

算法與數(shù)據(jù)結(jié)構(gòu) ? 來源:吳師兄學(xué)算法 ? 2023-02-06 10:25 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

一、題目描述

給定一個已排序的鏈表的頭head,刪除所有重復(fù)的元素,使每個元素只出現(xiàn)一次。返回已排序的鏈表。

30b3a59c-a4af-11ed-bfe3-dac502259ad0.png

二、題目解析

由于給定的鏈表是排好序的,因此重復(fù)的元素在鏈表中出現(xiàn)的位置是連續(xù)的,這個很關(guān)鍵。

因此我們只需要對鏈表進行一次遍歷,就可以刪除重復(fù)的元素。

具體操作如下:

1、設(shè)置一個指針cur,指向鏈表的頭節(jié)點,從鏈表的頭節(jié)點開始訪問每一個節(jié)點。

30c821f2-a4af-11ed-bfe3-dac502259ad0.png

2、開始不斷遍歷鏈表。

3、在訪問過程中,只要當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點有值,就不斷訪問下去

4、當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點有兩種關(guān)系。

5、當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點相同,此時要刪除重復(fù)元素, 由于鏈表已經(jīng)是排序的,所以去重操作只需要跳過后面這個重復(fù)的節(jié)點就行。

6、當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點不相同,那么 cur 這個節(jié)點可以保留下來,繼續(xù)訪問后面的節(jié)點

三、參考代碼

// LeetCode 100題精講:https://mp.weixin.qq.com/s/yznC53g46phq3qF7V4-obA
//作者:程序員吳師兄
//https://leetcode-cn.com/problems/remove-duplicates-from-sorted-list/
classSolution{
publicListNodedeleteDuplicates(ListNodehead){
//從鏈表的頭節(jié)點開始訪問每一個節(jié)點
ListNodecur=head;

//在訪問過程中,只要當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點有值,就不斷訪問下去
while(cur!=null&&cur.next!=null){

//當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點有兩種關(guān)系

//1、當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點相同,此時要刪除重復(fù)元素
//由于鏈表已經(jīng)是排序的,所以去重操作只需要跳過后面這個重復(fù)的節(jié)點就行
if(cur.val==cur.next.val){

//執(zhí)行這個操作之后,cur.next被跳過去了
cur.next=cur.next.next;

//2、當(dāng)前節(jié)點和當(dāng)前節(jié)點的下一個節(jié)點不相同,那么cur這個節(jié)點可以保留下來,繼續(xù)訪問后面的節(jié)點
}else{
//繼續(xù)訪問后面的節(jié)點
cur=cur.next;
}
}

//返回鏈表的頭節(jié)點就是結(jié)果
returnhead;
}
}






審核編輯:劉清

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • Val
    Val
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    8397
  • Headset
    +關(guān)注

    關(guān)注

    0

    文章

    13

    瀏覽量

    10506
  • null
    +關(guān)注

    關(guān)注

    0

    文章

    19

    瀏覽量

    4127

原文標(biāo)題:LeetCode 83:刪除排序鏈表中的重復(fù)元素

文章出處:【微信號:TheAlgorithm,微信公眾號:算法與數(shù)據(jù)結(jié)構(gòu)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關(guān)推薦
    熱點推薦

    講解鏈表刪除、修改以及插入

    上期介紹了動態(tài)鏈表怎么建立,以及使用循環(huán)的方式怎么輸出整個鏈表各個節(jié)點的數(shù)據(jù),這期主要講解 鏈表刪除、修改以及插入 !
    發(fā)表于 01-13 15:25 ?3334次閱讀
    講解<b class='flag-5'>鏈表</b>的<b class='flag-5'>刪除</b>、修改以及插入

    數(shù)據(jù)結(jié)構(gòu):單鏈表排序

    給定一個單鏈表的頭結(jié)點head(該結(jié)點有值),長度為n的無序單鏈表,對其按升序排序后,返回新鏈表。如當(dāng)輸入鏈表 {3,1,4,5,2} 時,
    的頭像 發(fā)表于 11-30 13:56 ?1890次閱讀
    數(shù)據(jù)結(jié)構(gòu):單<b class='flag-5'>鏈表</b>的<b class='flag-5'>排序</b>

    數(shù)據(jù)結(jié)構(gòu):刪除有序鏈表重復(fù)節(jié)點

    給定一個有序單鏈表(從小到大有序)的頭結(jié)點head(該結(jié)點有值),刪除鏈表重復(fù)元素,使鏈表
    的頭像 發(fā)表于 12-05 15:46 ?1324次閱讀
    數(shù)據(jù)結(jié)構(gòu):<b class='flag-5'>刪除</b>有序<b class='flag-5'>鏈表</b>的<b class='flag-5'>重復(fù)</b>節(jié)點

    在一維字符串?dāng)?shù)組刪除重復(fù)元素

    在一維字符串?dāng)?shù)組刪除重復(fù)元素
    發(fā)表于 05-07 16:50

    python去除列表重復(fù)元素的簡單操作

    的速度差別  m = ['b','c','d','b','c','a','a']  n = {}.fromkeys(m).keys()  print n  這兩種都有個缺點,祛除重復(fù)元素排序變了
    發(fā)表于 12-21 15:19

    玩轉(zhuǎn)C語言鏈表-鏈表各類操作詳解

      鏈表概述  鏈表是一種常見的重要的數(shù)據(jù)結(jié)構(gòu)。它是動態(tài)地進行存儲分配的一種結(jié)構(gòu)。它可以根據(jù)需要開辟內(nèi)存單元。鏈表有一個“頭指針”變量,以head表示,它存放一個地址。該地址指向一個元素
    發(fā)表于 09-18 13:30

    Labview如何實現(xiàn)相鄰重復(fù)元素合并成一個

    比如輸入一個數(shù)組AAAABBBBBCCCCCDDDDAAAA輸出ABCDA,只需要去重相鄰元素,處理后間隔可允許重復(fù)元素出現(xiàn)
    發(fā)表于 10-17 14:22

    OpenHarmony的HDF單鏈表及其迭代器

    范式是:初始化迭代器重復(fù)判斷(集合還有未被訪問的元素)獲取下一個元素的訪問方法讀寫下一個元素(也可能是
    發(fā)表于 08-30 10:31

    OpenHarmony的HDF單鏈表及其迭代器

    重復(fù)判斷(集合還有未被訪問的元素)獲取下一個元素的訪問方法讀寫下一個元素(也可能是刪除這個
    發(fā)表于 09-05 11:38

    原創(chuàng):Labview找出數(shù)組重復(fù)元素重復(fù)元素的全部索引

    *附件:查找重復(fù)元素.rar
    發(fā)表于 06-27 09:22

    合并兩個排序鏈表

    合并兩個排序鏈表一、題目要求 輸入兩個單調(diào)遞增的鏈表,輸出兩個鏈表合成后的鏈表,當(dāng)然我們需要合成后的
    發(fā)表于 01-16 22:02 ?645次閱讀

    如何進行單鏈表的查找、插入與刪除的詳細介紹包括了算法和源程序

    鏈表的查找、插入與刪除。設(shè)計算法,實現(xiàn)線性結(jié)構(gòu)上的單鏈表的產(chǎn)生以及元素的查找、插入與刪除。具體實現(xiàn)要求:
    發(fā)表于 07-16 08:00 ?22次下載
    如何進行單<b class='flag-5'>鏈表</b>的查找、插入與<b class='flag-5'>刪除</b>的詳細介紹包括了算法和源程序

    C++ vector刪除符合條件元素的編程技巧

    C++ vector實際刪除元素使用的是容器vecrotstd::vector::erase()方法。 C++ std::remove
    的頭像 發(fā)表于 09-20 10:03 ?5671次閱讀

    LeetCode 26:刪除有序數(shù)組重復(fù)

    在每次遍歷過程,比較 i 和 j 指向的元素值大小,把大的元素填充到 cur 的位置,填充完畢說明那個元素已經(jīng)放置在它應(yīng)該放置的位置,不需要在管它了,把 cur 向前移動,同時把 i
    的頭像 發(fā)表于 12-21 10:34 ?819次閱讀

    java的util包下有哪些類

    地插入、刪除和訪問元素。 HashSet:無序的集合,不允許重復(fù)元素。 LinkedHashSet:有序的集合,不允許重復(fù)元素。 TreeSet:有序的集合,根據(jù)
    的頭像 發(fā)表于 11-22 15:04 ?1474次閱讀