题解 | #删除链表的倒数第n个节点#
删除链表的倒数第n个节点
https://www.nowcoder.com/practice/f95dcdafbde44b22a6d741baf71653f6
package main
import . "nc_tools"
/*
* type ListNode struct{
* Val int
* Next *ListNode
* }
*/
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
*
* @param head ListNode类
* @param n int整型
* @return ListNode类
*/
func removeNthFromEnd( head *ListNode , n int ) *ListNode {
// write code here
fast, slow := head, head
// 快指针先走 n 步
for i := 0; i < n-1; i++ {
if fast == nil {
break
}
fast = fast.Next
}
if fast.Next == nil {
return head.Next // 头元素开始
}
// 此时快慢指针一直相差 n
var preNode *ListNode // 保存前一个元素
// 快慢指针同步移动,当快指针到达链表尾部时,慢指针正好到达倒数个元素位置
for fast.Next != nil {
preNode = slow
fast = fast.Next
slow = slow.Next
}
// 找到元素,并且删除该元素
preNode.Next = slow.Next
return head
}

