19. Remove Nth Node From End of List
Given a linked list, remove the nth node from the end of list and return its head.
For example,
Given linked list: 1->2->3->4->5, and n = 2. After removing the second node from the end, the linked list becomes 1->2->3->5.
Note:
Given n will always be valid.
Try to do this in one pass.
class Solution {
2
public:
3
ListNode* removeNthFromEnd(ListNode* head, int n) {
4
if (head == NULL) return head;
5
ListNode *p = head;
6
int l = 0;
7
while (p != NULL) {
8
l++; p = p->next;
9
}
10
p = head;
11
if (n > l) return head;
12
if (n == l) {
13
ListNode *q = head;
14
head = q->next;
15
delete q;
16
return head;
17
} else {
18
int s = l-n;
19
ListNode *q = head->next;
20
while (--s) {
21
p = p->next; q = q->next;
22
}
23
p->next = q->next;
24
delete q;
25
return head;
26
}
27
}
28
};