19-删除链表的倒数第N个结点

给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。


示例

给定一个链表: 1->2->3->4->5, 和 n = 2.

当删除了倒数第二个节点后,链表变为 1->2->3->5.

解法

核心思想:采用双指针,使他们相差n个位置,则后面的指针到达最后一个元素时,前面的指针刚好指向要删除元素的前一个元素。

class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
# 设置双指针
pre, p = head,head
# 只有一个结点的情况
if head.next==None:
return None
# p先向后移动n个位置
for i in range(n):
p=p.next
# 此时p为空,说明要删除的为头结点
if not p:
return head.next
# 删除位置不为首尾结点,同步向后移动,直到p指向最后一结点
while p.next:
p=p.next
pre=pre.next
# 删除结点
pre.next = pre.next.next
# 返回头结点
return head

来源

LeetCode中该题地址,Click here!

-------------本文结束感谢您的阅读-------------