题目
给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

思路
快慢指针法,让快指针先走n次,然后快慢指针一起走,当快指针走到尾结点时,慢指针的下一个节点即为待删除结点。
要注意释放内存。
C++代码
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* curHead = new ListNode(0);//定义虚拟头结点
curHead->next = head;//指向头结点
ListNode* pre = curHead;//慢指针
ListNode* cur = curHead;//快指针
while(n-- && cur->next != nullptr){
cur = cur->next;//快指针先走n次
}
//快慢指针同时走,当快指针指向最后一个结点时,慢指针的下一个结点就是待删除结点
while(cur->next != nullptr){
cur = cur->next;
pre = pre->next;
}
//注意释放内存
ListNode* temp = pre->next;
pre->next = pre->next->next;
delete temp;
head = curHead->next;
delete curHead;
return head;
}
};
1813

被折叠的 条评论
为什么被折叠?



