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

输入:head = [1,2,3,4,5], n = 2
输出:[1,2,3,5]
 
示例 2
输入:head = [1], n = 1
输出:[]
 
示例3
输入:head = [1,2], n = 1
输出:[1]
 
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     struct ListNode *next;
 * };
 */
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){
    struct ListNode *fast = head ,*slow = head ;
    int i = 0;
    for( ; i < n; i++)
        fast = fast->next;		// 快指针移动n步	
    while(fast && fast ->next)	// 判断快指针 和 快指针的 next 是否为空
    {
        fast = fast->next;		
        slow = slow->next;
    }
    if(fast == NULL)		// 如果快指针为空 则删除的是头结点
        head = head->next;
    else					// 慢指针为该节点的前继结点  指向下下个结点
        slow->next = slow->next->next;
    return head;    
}
}










