Algorithm 从列表末尾删除第n个节点LeetCode

Algorithm 从列表末尾删除第n个节点LeetCode,algorithm,linked-list,Algorithm,Linked List,我正在进行LeetCode挑战: 给定链表的头,从链表末尾移除nth节点并返回其头 跟进:你能一次完成吗 我的代码在某些测试用例中失败: 我得到这份报告: 我已经阅读了解决方案,看起来我的解决方案和我写的是一样的,但是我不知道我的错误在哪里。我的代码如下: def removeNthFromEnd(self,head:ListNode,n:int)->ListNode: 指针1=头 指针2=头 计数=0 如果不是指针1.next: 返回指针1.next 虽然指针2不是无: 如果计数>n: 指针1

我正在进行LeetCode挑战:

给定链表的
,从链表末尾移除
n
th节点并返回其头

跟进:你能一次完成吗

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

我得到这份报告:

我已经阅读了解决方案,看起来我的解决方案和我写的是一样的,但是我不知道我的错误在哪里。我的代码如下:

def removeNthFromEnd(self,head:ListNode,n:int)->ListNode:
指针1=头
指针2=头
计数=0
如果不是指针1.next:
返回指针1.next
虽然指针2不是无:
如果计数>n:
指针1=指针1.next
指针2=指针2.next
计数+=1
pointer1.next=pointer1.next.next
回流头

我已经做了半个小时了,我想不出怎么解决它。有人能帮忙吗?

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

注意:
if
之前的
while
循环测试该情况的一个非常特定的实例,即当列表只有一个元素时。但如上所述,此操作应适用于比
if
中确定的更一般的情况

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

如果不是指针1.next:
返回指针1.next
并在
while
循环后添加一个条件:

def removeNthFromEnd(self,head:ListNode,n:int)->ListNode:
指针1=头
指针2=头
计数=0
虽然指针2不是无:
如果计数>n:
指针1=指针1.next
指针2=指针2.next
计数+=1
如果计数>n:
pointer1.next=pointer1.next.next
回流头
其他:
返回头部。下一个

尝试将此数组作为输入-[1,2],n为2。你会看到出了什么问题…非常感谢!非常感谢。我接受了你的回答
[1,2]
2
Output [1]
Expected [2]