力扣链接:
https://leetcode-cn.com/probl…
解题思路:
- 申明虚构头节点,简化链表操作,使得所有的节点操作统一
- 删除倒数第 N 个节点,能够应用快慢指针,快指针先走, 慢指针再走,这样快指针到链表最初一个蒜素的时候,能够应用慢指针删除倒数第 N 个节点
- 这里须要留神,快指针先走 N + 1 步,使得慢指针正好停在待删除的元素前一个元素,不便删除
func removeNthFromEnd(head *ListNode, n int) *ListNode {dummyHead := &ListNode{}
slow, fast := dummyHead, dummyHead
dummyHead.Next = head
for n >=0 && fast != nil { // 多走一步,正好使得 slow 指针停在待删除的指针上一个地位
fast = fast.Next
n--
}
for fast != nil {
fast = fast.Next
slow = slow.Next
}
slow.Next = slow.Next.Next
return dummyHead.Next
}