【Leetcode】19. 删除链表的倒数第 N 个结点
【Leetcode】19. 删除链表的倒数第 N 个结点
代码
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
// 虚拟头结点
dummy := &ListNode{
Next : head,
}
// 快慢指针,初始时慢指针指向虚拟头结点,快指针指向第一个节点
s, f := dummy, head
// 快指针f先走n步
for f != nil && n > 0 {
f = f.Next
n--
}
// 快慢指针一起走,直到快指针走到nil
for ; f != nil; f = f.Next {
s = s.Next
}
// 如果慢指针的下一个节点存在,则让慢指针指向下一个节点的Next,即删除了下一个节点
if s.Next != nil {
s.Next = s.Next.Next
}
// 返回虚拟头节点
return dummy.Next
}