Leetcode 19 刪除鏈表的倒數(shù)第N個節(jié)點(diǎn)

刪除鏈表的倒數(shù)第N個節(jié)點(diǎn)

題目

給定一個鏈表,刪除鏈表的倒數(shù)第 n 個節(jié)點(diǎn)预柒,并且返回鏈表的頭結(jié)點(diǎn)。

  • 示例:

    給定一個鏈表: 1->2->3->4->5, 和 n = 2.
    
    當(dāng)刪除了倒數(shù)第二個節(jié)點(diǎn)后礁击,鏈表變?yōu)?1->2->3->5.
    

說明:

給定的 n 保證是有效的琅豆。

進(jìn)階:

你能嘗試使用一趟掃描實(shí)現(xiàn)嗎朱浴?

解答

  • 思路:

    • 用雙指針法七蜘;
    • 首先讓一個right指針沃粗,先指向第n + 1個節(jié)點(diǎn)柄粹,讓一個left指針指向頭節(jié)點(diǎn)喘鸟;
    • 然后讓兩個指針一起右移,直到right指針為None停止驻右;(過程中使用pre指針記錄left指針的左邊節(jié)點(diǎn)什黑,初始pre為None)
    • 最后刪除left指向的那個節(jié)點(diǎn)即可。
  • 代碼:

    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype ListNode
    
        (knowledge)
    
        思路:
        1. 用雙指針法堪夭;
        2. 首先讓一個right指針愕把,先指向第n + 1個節(jié)點(diǎn),讓一個left指針指向頭節(jié)點(diǎn)森爽;
        3. 然后讓兩個指針一起右移恨豁,直到right指針為None停止;(過程中使用pre指針記錄left指針的左邊節(jié)點(diǎn)爬迟,初始pre為None)
        4. 最后刪除left指向的那個節(jié)點(diǎn)即可
        """
        pre, left, right = None, head, head
    
        # 首先讓right指針指向第n + 1個節(jié)點(diǎn)
        for i in range(n):
            right = right.next
    
        # left和right兩個指針一起右移橘蜜,同時使用pre記錄left指針的左邊節(jié)點(diǎn)
        while right:
            pre, left, right = left, left.next, right.next
    
        if not pre: # 處理要刪除的節(jié)點(diǎn)是頭節(jié)點(diǎn)的情況
            return head.next
        else:
            pre.next = left.next
            return head
    

測試驗證

class ListNode:
    def __init__(self, x):
        self.val = x
        self.next = None
    
    def __repr__(self):
        if self:
            return "{}->{}".format(self.val, repr(self.next))

class Solution:
    def removeNthFromEnd(self, head, n):
        """
        :type head: ListNode
        :type n: int
        :rtype ListNode

        (knowledge)

        思路:
        1. 用雙指針法;
        2. 首先讓一個right指針雕旨,先指向第n + 1個節(jié)點(diǎn)扮匠,讓一個left指針指向頭節(jié)點(diǎn);
        3. 然后讓兩個指針一起右移凡涩,直到right指針為None停止棒搜;(過程中使用pre指針記錄left指針的左邊節(jié)點(diǎn),初始pre為None)
        4. 最后刪除left指向的那個節(jié)點(diǎn)即可
        """
        pre, left, right = None, head, head

        # 首先讓right指針指向第n + 1個節(jié)點(diǎn)
        for i in range(n):
            right = right.next

        # left和right兩個指針一起右移活箕,同時使用pre記錄left指針的左邊節(jié)點(diǎn)
        while right:
            pre, left, right = left, left.next, right.next

        if not pre: # 處理要刪除的節(jié)點(diǎn)是頭節(jié)點(diǎn)的情況
            return head.next
        else:
            pre.next = left.next
            return head


if __name__ == '__main__':
    solution = Solution()
    head = ListNode(1)
    head.next = ListNode(2)
    head.next.next = ListNode(3)
    head.next.next.next = ListNode(4)
    head.next.next.next.next = ListNode(5)
    print(solution.removeNthFromEnd(head, 2), "= 1->2->3->5")
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末力麸,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌克蚂,老刑警劉巖闺鲸,帶你破解...
    沈念sama閱讀 222,729評論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異埃叭,居然都是意外死亡摸恍,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,226評論 3 399
  • 文/潘曉璐 我一進(jìn)店門赤屋,熙熙樓的掌柜王于貴愁眉苦臉地迎上來立镶,“玉大人,你說我怎么就攤上這事类早∶拿剑” “怎么了?”我有些...
    開封第一講書人閱讀 169,461評論 0 362
  • 文/不壞的土叔 我叫張陵涩僻,是天一觀的道長缭召。 經(jīng)常有香客問我,道長逆日,這世上最難降的妖魔是什么嵌巷? 我笑而不...
    開封第一講書人閱讀 60,135評論 1 300
  • 正文 為了忘掉前任,我火速辦了婚禮室抽,結(jié)果婚禮上晴竞,老公的妹妹穿的比我還像新娘。我一直安慰自己狠半,他們只是感情好噩死,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,130評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著神年,像睡著了一般已维。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上已日,一...
    開封第一講書人閱讀 52,736評論 1 312
  • 那天垛耳,我揣著相機(jī)與錄音,去河邊找鬼飘千。 笑死堂鲜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的护奈。 我是一名探鬼主播缔莲,決...
    沈念sama閱讀 41,179評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼霉旗!你這毒婦竟也來了痴奏?” 一聲冷哼從身側(cè)響起蛀骇,我...
    開封第一講書人閱讀 40,124評論 0 277
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎读拆,沒想到半個月后擅憔,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,657評論 1 320
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檐晕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,723評論 3 342
  • 正文 我和宋清朗相戀三年暑诸,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片辟灰。...
    茶點(diǎn)故事閱讀 40,872評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡屠列,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伞矩,到底是詐尸還是另有隱情,我是刑警寧澤夏志,帶...
    沈念sama閱讀 36,533評論 5 351
  • 正文 年R本政府宣布乃坤,位于F島的核電站,受9級特大地震影響沟蔑,放射性物質(zhì)發(fā)生泄漏湿诊。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,213評論 3 336
  • 文/蒙蒙 一瘦材、第九天 我趴在偏房一處隱蔽的房頂上張望厅须。 院中可真熱鬧,春花似錦食棕、人聲如沸朗和。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,700評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽眶拉。三九已至,卻和暖如春憔儿,著一層夾襖步出監(jiān)牢的瞬間忆植,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,819評論 1 274
  • 我被黑心中介騙來泰國打工谒臼, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朝刊,地道東北人。 一個月前我還...
    沈念sama閱讀 49,304評論 3 379
  • 正文 我出身青樓蜈缤,卻偏偏與公主長得像拾氓,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子底哥,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,876評論 2 361