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

77 阅读1分钟

要求:

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

进阶: 你能尝试使用一趟扫描实现吗?

  • 示例 1

image.png

 输入:head = [1,2,3,4,5], n = 2
 输出:[1,2,3,5]
  • 示例 2
 输入:head = [1], n = 1
 输出:[]
  • 示例 3
 输入:head = [1,2], n = 1
 输出:[1]

详解代码

 # class ListNode:
 #     def __init__(self, val=0, next=None):
 #         self.val = val
 #         self.next = next
 class Solution:
     def removeNthFromEnd(self, head: ListNode, n: int) -> ListNode:
         if not head:
             return None
         
         ref = head
         while n > 0:
             ref = ref.next
             n -= 1
         if ref is None:
             return head.next
         else:
             main = head
             while ref.next:
                 main = main.next
                 ref = ref.next
             main.next = main.next.next
             return head

image.png

image.png 解题的思路:如图所示,我们使用间距定位倒数第n个位置上的元素