leetcode-19

101 阅读1分钟

题目描述:为删除链表倒数第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
}