LCR 021. 删除链表的倒数第 N 个结点
想法:
- 采用双指针。
- 快指针先走n步。
- 判断fast的边界(nullptr)
- 如果pre==head 且 fast==nullptr则表示n等于链表的长度,即删除第一个节点,例如有链表{1,2,3,4,5},给出n=5,删除倒数第五个结点,也就是第一个节点。
- 其他情况直接
- 暂不考虑内存泄漏问题
/**
* Definition for singly-linked list.
* struct ListNode {
* int val;
* ListNode *next;
* ListNode() : val(0), next(nullptr) {}
* ListNode(int x) : val(x), next(nullptr) {}
* ListNode(int x, ListNode *next) : val(x), next(next) {}
* };
*/
class Solution {
public:
ListNode* removeNthFromEnd(ListNode* head, int n) {
ListNode* pre=head;
ListNode* fast=head;
while(n--){
fast = fast->next;
}
while(fast!=nullptr && fast->next!=nullptr){
fast = fast->next;
pre = pre->next;
}
if(pre==head&&fast==nullptr){
return head->next;
}
pre->next = pre->next->next;
return head;
}
};