19. Remove Nth Node From End of List
题目描述
移除链表中从末端开始数第N个元素
使用两个指针fast和slow:将其间的距离设为相差N个位置,随后将其同时向后移动,直至fast到达最后一个字母,此时slow对应位置即欲删除的元素。
特殊情况:删除的元素是链表的第一个元素时,将fast向后移动N个位置,判断它是否为空,若为空,则代表移除的是第一个元素,直接返回head.next作为答案。
if not fast: #若第n+1个数为空,删掉倒数n-th数即1st数,所以直接返回head.next
return head.next
完整代码
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
class Solution(object):
def removeNthFromEnd(self, head, n):
"""
:type head: ListNode
:type n: int
:rtype: ListNode
"""
fast=slow=head #定义三个链表指针
for _ in range(n): #无需使用循环变量i,所以无需定义,用_代替
fast=fast.next #将fast移至第n+1个数
if not fast: #若第n+1个数为空,删掉倒数n-th数即1st数,所以直接返回head.next
return head.next
#fast和slow指针同时向后移动,二者之间相差n个数,
#当fast移至末尾时,slow恰好位于倒数第n+1个位置
while fast.next:
fast=fast.next
slow=slow.next
slow.next=slow.next.next #将倒数n+1个数的next指针指向后两个的位置
return head