1 Given a linked list, remove the nth node from the end of list and return its head. 2 3 For example, 4 5 Given linked list: 1->2->3->4->5, and n = 2. 6 7 After removing the second node from the end, the linked list becomes 1->2->3->5. 8 Note: 9 Given n will always be valid. 10 Try to do this in one pass.
1 /** 2 * Definition for singly-linked list. 3 * struct ListNode { 4 * int val; 5 * struct ListNode *next; 6 * }; 7 */ 8 struct ListNode* removeNthFromEnd(struct ListNode* head, int n) { 9 struct ListNode* cur; 10 struct ListNode* pre; 11 cur = head; 12 pre = head; 13 if(head == NULL) 14 return head; 15 while(n) 16 { 17 cur = cur->next; 18 n--; 19 } 20 if(cur == NULL){ 21 head = head->next; 22 return head; 23 } 24 while(cur->next != NULL){ 25 cur = cur->next; 26 pre = pre->next; 27 } 28 pre->next = pre->next->next; 29 return head; 30 31 }