List removeNthFromEnd(List head, int n) { List newHead = (List)malloc(sizeof(struct ListNode)); newHead->next = head; List slow = newHead, fast = newHead; for( int i = 0 ; i < n + 1 ; i ++ ) { fast = fast->next; } while(fast) { slow = slow->next; fast = fast->next; } //List tmp = slow->next; slow->next = slow->next->next; //free(tmp); List res = newHead->next; free(newHead); return res; }