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 }