description:
Given a linked list, remove the n-th node from the end of list and return its head.
Note:
Given n will always be valid.
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.
my answer:
my answer
在链表中,两个有着固定距离的指针一起走的方法要记住,这里是前面那个走到最后一个结点了,后边这个正好走到倒数第n+1个,就是要删掉的那个前面一个
大佬的answer:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
if(!head->next) return NULL;
ListNode *pre = head, *cur = head;//结点指针的定义
for(int i = 0; i < n; ++i) cur = cur->next;
if(!cur) return head->next;//如果链表长度就是n的话,一个special case
while(cur->next){
cur = cur->next;
pre = pre->next;
}
pre->next = pre->next->next;
return head;
}
};