1 /**
2 * Definition for singly-linked list.
3 * struct ListNode {
4 * int val;
5 * ListNode *next;
6 * ListNode(int x) : val(x), next(NULL) {}
7 * };
8 */
9 class Solution {
10 public:
11 ListNode *removeNthFromEnd(ListNode *head, int n) {
12 // IMPORTANT: Please reset any member data you declared, as
13 // the same Solution instance will be reused for each test case.
14 ListNode * toRemove = NULL, * before=NULL;
15 ListNode * itr = head;
16 int i = 0;
17 while (itr!=NULL){
18 i++;
19 if (i==n)
20 toRemove = head;
21 else if (i>n){
22 before = toRemove;
23 toRemove = toRemove->next;
24 }
25 itr = itr->next;
26 }
27 if (toRemove==head)
28 return head->next;
29 before->next = toRemove->next;
30 return head;
31 }
32 };