CC150答案
http://www.hawstein.com/posts/2.3.html
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 {
public:
/*
题意:删除链表中倒数第n个结点,尽量只扫描一遍。
使用两个指针扫描,当第一个指针扫描到第N个结点后,
第二个指针从表头与第一个指针同时向后移动,
当第一个指针指向空节点时,另一个指针就指向倒数第n个结点了
*/
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *res = new ListNode(0);
res->next = head;
ListNode *tmp = res;
for (int i = 0; i < n; i++) {
head = head->next;
}
while (head != NULL) {
head = head->next;
tmp = tmp->next;
}
tmp->next = tmp->next->next;
return res->next;
}
};