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

56 阅读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]
type ListNode struct {
   Val  int
   Next *ListNode
}

//如何找到倒数第n个节点?
//双指针法 两个指针相差n
func removeNthFromEnd(head *ListNode, n int) *ListNode {
   //first只想倒数第n个节点
   var first = head
   var second = head
   //指向倒数第n个节点的前一个节点
   var preFirst *ListNode = nil
   for ; n > 0; n-- {
      second = second.Next
   }
   for {
      if second == nil {
         break
      }
      second = second.Next
      preFirst = first
      first = first.Next
   }
   //删除的是第一个节点
   if preFirst == nil {
      head = first.Next
   } else {
      preFirst.Next = first.Next
   }
   return head
}