leetcode每日一題—19.刪除連結串列的倒數第N個結點

柒年時光發表於2020-10-18

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

示例:
給定一個連結串列: 1->2->3->4->5, 和 n = 2.
當刪除了倒數第二個節點後,連結串列變為 1->2->3->5.

說明:給定的 n 保證是有效的。

思路:
使用快慢指標,快指標先走n步,當快指標指向連結串列最後一個結點時,慢指標指向要刪除一個結點的前一個結點。
注意:為了避免被刪除結點為連結串列第一個結點時所帶來的複雜操作,在頭節點之前再引入一個pre結點。

解答:

# 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:
        pre=ListNode(0)
        pre.next=head
        slow=fast=pre
        for _ in range(n):
            fast=fast.next
        while fast.next:
            slow=slow.next
            fast=fast.next
        slow.next=slow.next.next
        return pre.next

相關文章