题意:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead=new ListNode(0); //定义虚拟头结点
ListNode* fast=dummyHead; //定义快指针
ListNode* slow=dummyHead; //慢指针
dummyHead->next=head;
while(n--)
{
fast=fast->next;
}
fast=fast->next; //先让快指针移动到第n+1个节点
while(fast!=NULL)
{
slow=slow->next;
fast=fast->next;
} //然后快慢指针同时移动,直到快指针移动到NULL处,此时慢指针移动到了要被删除结点的上一个结点。
ListNode* tmp=slow->next;
slow->next=slow->next->next;
delete tmp; //删除该结点,并连接下一个结点。
return dummyHead->next;