问题描述
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
双指针法
p,q=head,先将q向后移动n,再一起将p,q向后移动到尾部p则为应要删除的结点的前一个指针
特殊数据:n刚好等于链表长度,直接用head删除第一个结点即可
代码
class Solution:
def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
p = head
q = head
while n > 0:
q = q.next
n = n - 1
if not q:
head = head.next
return head
while q.next:
q = q.next
p = p.next
p.next = p.next.next
return head