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))) } */