leetcode-19 刪除鏈表的倒數第N個節點

問題描述

給定一個鏈表,刪除鏈表的倒數第 n 個節點,而且返回鏈表的頭結點。node

示例:python

給定一個鏈表: 1->2->3->4->5, 和 n = 2.code

當刪除了倒數第二個節點後,鏈表變爲 1->2->3->5.
說明:rem

給定的 n 保證是有效的。it

進階:io

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

錯誤解答

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

class Solution(object):
    def removeNthFromEnd(self, head, n):
        def  remove(node):
            if not node:
                return 0, node
            i, _ = remove(node.next)  # 先返回
            if i==n:
                node.next = node.next.next  # 後處理
            return i+1, node
        return remove(head)[1]
# 這樣是有問題的, 若是刪除隊首元素會出現問題

 
應該先處理, 在返回, 即返回已經刪除後以後的頭節點object

正確解答

class Solution(object):
    def removeNthFromEnd(self, head, n):
        def remove(node):
            if not node:
                return 0, node
            i, node.next = remove(node.next)
            return i+1, (node, node.next)[i+1==n]
        return remove(head)[1]
相關文章
相關標籤/搜索