给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
输入:head = [1,2], n = 1
输出:[1]
思路:
双指针,定义一个slow指针,一个fast指针,先让fast指针往后移动n个位置,然后slow开始往后一起和fast移动。当fast的next为None时,说明fast到达链表的尾部(最后一个结点)。此时,要删除的倒数第N个结点,其实就是slow的next,slow.next = slow.next.next,把slow指向next的next
# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def removeNthFromEnd(self, head: Optional[ListNode], n: int) -> Optional[ListNode]:
dummy_head = ListNode(next = head)
slow, fast = dummy_head, dummy_head
while n!=0:
fast = fast.next
n = n - 1
while fast.next != None:
slow = slow.next
fast = fast.next
slow.next = slow.next.next
return dummy_head.next