1. 题目
给定一个链表,删除链表的倒数第 n 个节点,并且返回链表的头结点。
示例:
给定一个链表: 1->2->3->4->5, 和 n = 2.
当删除了倒数第二个节点后,链表变为 1->2->3->5.
2. 代码
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode *Fast=head;//创建一个快一点的指针
while(n-->0)
{
Fast=Fast->next;
}
if(Fast==NULL)//如果Fast==NULL,那么说明倒数第n个是head,那么直接返回head->next
return head->next;
ListNode *Slow=head;//创建一个慢一步的指针,使得Slow与Fast间隔n,这样当Fast走到NULL的时候,Slow->next指向的就是应该
//删除的节点
Fast=Fast->next;
while(Fast!=NULL)
{
Fast=Fast->next;
Slow=Slow->next;
}
Slow->next=Slow->next->next;
return head;
}
};