package main

/**
 * 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 {
		return slow.Next
	}
	for fast.Next != nil {
		fast = fast.Next
		slow = slow.Next
	}
	slow.Next = slow.Next.Next
	return head
}

/* func main() {
	l15 := ListNode{5, nil}
	l14 := ListNode{4, &l15}
	l13 := ListNode{3, &l14}
	l12 := ListNode{2, &l13}
	l1 := &ListNode{1, &l12}
	fmt.Println(list2str(removeNthFromEnd(l1, 2)))
	l22 := ListNode{2, nil}
	l2 := &ListNode{1, &l22}
	fmt.Println(list2str(removeNthFromEnd(l2, 2)))
} */