/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* struct ListNode *next;
* };
*/
struct ListNode* removeNthFromEnd(struct ListNode* head, int n) {
struct ListNode* t = head;
struct ListNode* p = head;
struct ListNode* q;
while (n != 0)
{
t = t -> next;
n--;
}
if (t == NULL)
{
q = head;
head = head -> next;
free (q);
return head;
}
while (t != NULL)
{
q = p;
p = p -> next;
t = t -> next;
}
q -> next = p -> next;
free (p);
return head;
}