1. 程式人生 > 實用技巧 >LeetCode 19. 刪除連結串列的倒數第N個節點

LeetCode 19. 刪除連結串列的倒數第N個節點

19. 刪除連結串列的倒數第N個節點

Difficulty: 中等

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

示例:

給定一個連結串列: 1->2->3->4->5, 和 n = 2.

當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.

說明:

給定的 n保證是有效的。

進階:

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

Solution

Language: ****

# 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: ListNode, n: int) -> ListNode:
    if not head: return None
    slow = head
    tmp = head
    for _ in range(n):
      fast = tmp.next
      tmp = tmp.next
    
    if fast:
      while fast.next:
        fast = fast.next
        slow = slow.next
      slow.next = slow.next.next
    else:
      head = head.next
    return head