Given A linked list, remove the nth node from the end of the 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 would always be valid.
Try to do the in one pass.
The usual solution is to rotation the total length of the list, calculate the index (LEN-N) that needs to be deleted, but it takes two cycles. The code is as follows:
classSolution { Public: ListNode* Removenthfromend (listnode* head,intN) {intCNT =0; ListNode* node =Head; while(node) {++CNT; Node= node->Next; } intindex = CNT-N; if(0==index) {Head= head->Next; } Else{node=Head; while(--index) {Node= node->Next; } node->next = node->next->Next; } returnHead; }};
In the solution above, you have to calculate the Len before you can calculate the index. We can use another method to calculate index, first loop n times, so that node self-increment. A new pointer slow to head, then node and slow increment, node is empty, slow is just the point to delete. The code is as follows:
int N) { **slow = &head, *fast = head; while (--n) fast = Fast->next; while (fast->Next) { = & ((*slow),next); = Fast->next; } *slow = (*slow),next; return head;}
Remove Nth Node from End of List