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.
Main topic
Given a linked list, remove the last nth node and return to the head of the new list note: N is always valid and attempts to scan only one trip.
Difficulty factor:
Easy
Realize
It's easy to just remove the last nth, but if you scan only one trip, I think of a method I'm looking at, and that's the way I look at others.
ListNode *removeNthFromEnd(ListNode *head, int n) { ListNode *list1, *list2; list2 = list1 = head; while (n-- > 0) { list2 = list2->next; } if (list2 == NULL) { return head->next; } while (list2->next != NULL) { list1 = list1->next; list2 = list2->next; } list1->next = list1->next->next; return head;}
PS: Deleting a node here should release the memory in it.
Leetcode19--remove Nth Node from End of List