1. 程式人生 > 其它 >LeetCode第十九題—Python實現

LeetCode第十九題—Python實現

技術標籤:LeetCode連結串列單鏈表Python


title: LeetCode No.19

categories:

  • OJ
  • LeetCode

tags:

  • Programing
  • LeetCode
  • OJ

LeetCode第十九題

題目描述

給你一個連結串列,刪除連結串列的倒數第n個結點,並且返回連結串列的頭結點。

進階:你能嘗試使用一趟掃描實現嗎?

figure.1

示例 1:

輸入:head = [1,2,3,4,5], n = 2
輸出:[1,2,3,5]
示例 2:

輸入:head = [1], n = 1
輸出:[]
示例 3:

輸入:head = [1,2], n = 1
輸出:[1]


提示:

連結串列中結點的數目為 sz
1 <= sz <= 30
0 <= Node.val <= 100
1 <= n <= sz

程式碼

# Definition for singly-linked list.
class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

class Solution:
    def removeNthFromEnd(self, head, n):
        """
            基本思想:由於是尋找從後往前數第n個,因此第一遍先正數n個,然後第二遍再從頭開始往後遍歷同時第一遍正數的從n開始為空之後,這樣第二遍數的就變為到空還有n個
            然後在去掉第倒數n個節點就行了。
        """
        a = head
        b = head
        # 第一遍數n個
        for i in range(n):
            if a.next:
                a = a.next
            else:
                return head.next
        # 接著數第一遍的同時,第二遍從頭開始
        while a.next:
            a = a.next
            b = b.next
        b.next = b.next.next
        return head