Problem:
Remove Nth Node From 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.
Solution:
two pointers
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode * it = head;
ListNode * fast = head;
if(head -> next == NULL) return NULL; //important
for(int i = 0;i < n; i++)
{
fast = fast -> next;
}
if(fast == NULL) //important
{
head = it -> next;
delete it;
return head;
}
while(fast->next != NULL)
{
fast = fast->next;
it = it ->next;
}
if(it->next != NULL)
{
ListNode* discard = it -> next;
it->next = it->next->next;
delete discard;
}
return head;
}
};
Memo:
Always check the edge cases!!!
Check validation for all it->next
operation!!!!!