题目:
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
示例 1:

输入:head = [1,2,3,4,5], n = 2 输出:[1,2,3,5]
示例 2:
输入:head = [1], n = 1 输出:[]
示例 3:
输入:head = [1,2], n = 1 输出:[1]
提示:
- 链表中结点的数目为
sz 1 <= sz <= 300 <= Node.val <= 1001 <= n <= sz
进阶:你能尝试使用一趟扫描实现吗?
解题思路:
方法一:
通过遍历获得数组的长度,通过for循环找到倒数第n个指针,删除即可
代码:
# 通过遍历的方式找到倒数第n个结点
class Solution:
def removeNthFromEnd(self, head, n: int):
p = head
new_head= ListNode()
new_head.next = head
q = new_head
length = 0
while p:
length+=1
p = p.next
p = head
for i in range(length-n):
p = p.next
q = q.next
q.next = p.next
return new_head.next
方法二:
将指针进行反转,直接顺序查找要删除的指针,然后将删除后的指针数组重新反转
代码:
# 通过将指针反转也可以
def reverse(head):
if not head or not head.next:
return head
new_head = reverse(head.next)
head.next.next = head
head.next = None
return new_head
class Solution:
def removeNthFromEnd(self, head, n: int):
new_head = reverse(head)
p = new_head
List = ListNode()
List.next = new_head
q = List
for i in range(n-1):
p = p.next
q = q.next
q.next = p.next
p.next = None
head = reverse(List.next)
return head

754

被折叠的 条评论
为什么被折叠?



