题目描述
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。
本题思路
代码如下:
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* dummyHead = new ListNode(0);
dummyHead->next = head;
ListNode* fast = dummyHead;
ListNode* slow = dummyHead;
n++;
while(n--){//这里题中规定了n不会比链表长
fast=fast->next;
}
while(fast!=nullptr){
fast=fast->next;
slow=slow->next;
}
ListNode*tmp;
tmp=slow->next;
slow->next=tmp->next;
delete tmp;
return dummyHead->next;
}
};
快慢指针指向虚拟头节点,快指针先走n+1步,再两者同时走,直到快指针指向空指针,其后就是删除操作