给你一个链表,删除链表的倒数第 n **个结点,并且返回链表的头结点。
示例 1:
输入: 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
}