题目描述:为删除链表倒数第N个节点。
解题思路:创建两个指针,可分别命名为slow,fast,均初始化为head。首先令fast向前移动N次,每次移动一个节点,slow节点原地不动。其次令fast指针继续向前移动,此时slow节点随之移动,二者每次均移动一个节点,当fast节点移动至链表尾部时,slow节点正好位于倒数N+1的位置。注意需特殊处理删除节点为头节点的情况
具体代码:
/**
* Definition for singly-linked list.
* type ListNode struct {
* Val int
* Next *ListNode
* }
*/
func removeNthFromEnd(head *ListNode, n int) *ListNode {
fast, slow := head, head
for i := 0; i < n; i++ {
fast = fast.Next
}
if fast == nil { // 特殊处理删除节点为头节点情况
head = head.Next
return head
}
for fast.Next != nil {
slow = slow.Next
fast = fast.Next
}
slow.Next = slow.Next.Next
return head
}