给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
    示例:

    1. 给定一个链表: 1->2->3->4->5, n = 2.
    2. 当删除了倒数第二个节点后,链表变为 1->2->3->5.

    说明:
    给定的 n 保证是有效的。
    进阶:
    你能尝试使用一趟扫描实现吗?

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode() : val(0), next(nullptr) {}
     *     ListNode(int x) : val(x), next(nullptr) {}
     *     ListNode(int x, ListNode *next) : val(x), next(next) {}
     * };
     */
    class Solution {
    public:
        ListNode* removeNthFromEnd(ListNode* head, int n) {
            ListNode* fast = head;
            ListNode* slow = head;
            for(int i =0;i<n;i++){
                fast = fast->next;
            }
            if(fast == nullptr){
                return head->next;
            }
            while(fast->next != nullptr){
                fast = fast->next;
                slow = slow->next;
            }
            slow->next = slow->next->next;
            return head;      
        }
    };