【问题标题】:Remove Nth Node From End of List LeetCode从列表末尾删除第 N 个节点 LeetCode
【发布时间】:2021-06-03 16:17:45
【问题描述】:

我正在参加Remove Nth Node from End of List LeetCode 挑战:

给定链表的head,从链表的末尾删除nth节点并返回它的头。

跟进:你能一次性完成吗?

我的代码在某些测试用例上失败了:

[1,2]
2

我得到了这份报告:

Output [1]
Expected [2]

我已经阅读了解决方案,我的解决方案似乎与所写的相同,但我不知道我的错误在哪里。我的代码如下:

def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
    pointer1 = head
    pointer2 = head
    count = 0
    if not pointer1.next:
        return pointer1.next
    while pointer2 is not None:
        if count > n:
            pointer1 = pointer1.next
        pointer2 = pointer2.next
        count += 1
    pointer1.next = pointer1.next.next
    return head

我已经在这个问题上待了半个小时,我不知道如何解决它。有人可以帮忙吗?

【问题讨论】:

  • 试试这个数组作为输入 - [1,2] 并且 n 是 2。你会看到出了什么问题......

标签: algorithm linked-list


【解决方案1】:

n 等于列表中的节点数时,您的解决方案将失败。在这种情况下,您应该从列表中删除第一个节点,因此您应该返回 head.next

注意:ifwhile 循环测试之前的 if 是针对这种情况的一个非常具体的实例,即当列表只有一个元素时。但如上所述,此操作应适用于比if 中确定的更通用的情况。

因此,可以删除以下if 条件:

if not pointer1.next:
    return pointer1.next

并在while 循环之后添加一个条件

def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
    pointer1 = head
    pointer2 = head
    count = 0
    while pointer2 is not None:
        if count > n:
            pointer1 = pointer1.next
        pointer2 = pointer2.next
        count += 1
    if count > n:
        pointer1.next = pointer1.next.next
        return head  
    else:
        return head.next

【讨论】:

  • 非常感谢!非常感激。我接受了你的回答
猜你喜欢
  • 2023-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-14
相关资源
最近更新 更多