第一想法就是双指针
一次遍历。
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
l1,l2=head,head
for i in range(n):
l2=l2.next
if not l2:
return head.next
while True:
if l2.next:
l1,l2=l1.next,l2.next
else:
l1.next=l1.next.next
return head
后来看题解竟然有大佬用递归
递归返回其是第几个节点
在递归过程中通过判断是第几个节点来删除节点
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
def removeNode(node,n):
if node.next:
m=removeNode(node.next,n)
if m==n:
node.next=node.next.next
return m+1
else:
return 1
a=head.next if removeNode(head,n)==n else head
return a