LeetCode Remove Linked List Elements

Remove all elements from a linked list of integers that have value val.
Example*****Given:* 1 --> 2 --> 6 --> 3 --> 4 --> 5 --> 6, val = 6Return: 1 --> 2 --> 3 --> 4 --> 5
Credits:Special thanks to @mithmatt for adding this problem and creating all test cases.

Subscribe to see which companies asked this question.

描述:

刪除鏈表中等于給定值val的所有節(jié)點。

樣例:

給出鏈表 1->2->3->3->4->5->3, 和 val = 3, 你需要返回刪除3之后的鏈表:1->2->4->5。

** 分析: **

1.首先判斷head是不是空,為空就直接返回null
2.然后從head.next開始循環(huán)遍歷,刪除相等于val的元素
3.最后判斷head是否和val相等蟹地,若相等姑子,head = head.next
(這里最后判斷head是有原因的鸠蚪,因為head只是一個節(jié)點重慢,只要判斷一次,如果最先判斷head就比較麻煩逊躁,因為如果等于val似踱,head就要發(fā)生變化)
這里也體現(xiàn)出為什么設(shè)計鏈表的時候要空出一個頭結(jié)點

** 代碼 **:

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
public class Solution {
    public ListNode removeElements(ListNode head, int val) {
        
        //邊界條件判斷,如果head為null,則直接返回null
        if(head == null)
            return null;
        
        //操作鏈表時的技巧稽煤,為了方便返回結(jié)果核芽,我們新建一個dummy節(jié)點作為一個頭結(jié)點
        ListNode dummy = new ListNode(0);
        dummy.next = head;
        //刪除鏈表時的操作,最好加一個頭結(jié)點酵熙,這樣刪除的操作就是:head.next = head.next.next
        head = dummy;
        
        //開始循環(huán)鏈表轧简,結(jié)束的條件是到達(dá)最后一個節(jié)點,因為有一個頭結(jié)點的存在匾二,所以是head.next != null
        while(head.next != null) {
            //如果head.next節(jié)點等于val哮独,就是要被刪除的節(jié)點
            if(head.next.val == val)
                head.next = head.next.next;
            //否則繼續(xù)判斷下一個節(jié)點
            else
                head = head.next;
        }
        return dummy.next;
        
    }
}
Paste_Image.png

在leetcode的討論中,看到一個特別的方法察藐,三行遞歸代碼解決這個問題:
首先我們先看代碼:

public ListNode removeElements(ListNode head, int val) {
        if (head == null) return null;
        head.next = removeElements(head.next, val);
        return head.val == val ? head.next : head;
}

思路比較新穎皮璧,但原理很簡單,遞歸調(diào)用分飞,如果當(dāng)前節(jié)點等于val就刪除悴务,但是效率較低,但不失為拓展思路的好方法譬猫,或許鏈表的結(jié)構(gòu)也利于使用遞歸讯檐?

Paste_Image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末羡疗,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子别洪,更是在濱河造成了極大的恐慌叨恨,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,284評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件蕉拢,死亡現(xiàn)場離奇詭異特碳,居然都是意外死亡,警方通過查閱死者的電腦和手機晕换,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評論 3 395
  • 文/潘曉璐 我一進(jìn)店門午乓,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人闸准,你說我怎么就攤上這事益愈。” “怎么了夷家?”我有些...
    開封第一講書人閱讀 164,614評論 0 354
  • 文/不壞的土叔 我叫張陵蒸其,是天一觀的道長。 經(jīng)常有香客問我库快,道長摸袁,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,671評論 1 293
  • 正文 為了忘掉前任义屏,我火速辦了婚禮靠汁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘闽铐。我一直安慰自己蝶怔,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,699評論 6 392
  • 文/花漫 我一把揭開白布兄墅。 她就那樣靜靜地躺著踢星,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙咸。 梳的紋絲不亂的頭發(fā)上沐悦,一...
    開封第一講書人閱讀 51,562評論 1 305
  • 那天,我揣著相機與錄音五督,去河邊找鬼所踊。 笑死,一個胖子當(dāng)著我的面吹牛概荷,可吹牛的內(nèi)容都是我干的秕岛。 我是一名探鬼主播,決...
    沈念sama閱讀 40,309評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼继薛!你這毒婦竟也來了修壕?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,223評論 0 276
  • 序言:老撾萬榮一對情侶失蹤遏考,失蹤者是張志新(化名)和其女友劉穎慈鸠,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體灌具,經(jīng)...
    沈念sama閱讀 45,668評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡青团,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,859評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了咖楣。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片督笆。...
    茶點故事閱讀 39,981評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖诱贿,靈堂內(nèi)的尸體忽然破棺而出娃肿,到底是詐尸還是另有隱情,我是刑警寧澤珠十,帶...
    沈念sama閱讀 35,705評論 5 347
  • 正文 年R本政府宣布料扰,位于F島的核電站,受9級特大地震影響焙蹭,放射性物質(zhì)發(fā)生泄漏晒杈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,310評論 3 330
  • 文/蒙蒙 一孔厉、第九天 我趴在偏房一處隱蔽的房頂上張望桐智。 院中可真熱鬧,春花似錦烟馅、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至姿搜,卻和暖如春寡润,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背舅柜。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評論 1 270
  • 我被黑心中介騙來泰國打工梭纹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人致份。 一個月前我還...
    沈念sama閱讀 48,146評論 3 370
  • 正文 我出身青樓变抽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子绍载,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,933評論 2 355

推薦閱讀更多精彩內(nèi)容