解题思路
快慢指针,快指针先走n-1步,然后快慢指针一起走直到快指针
下一个节点的下一个节点为NULL,然后慢指针指向的节点就是需要删除的节点的前驱节点
如果要删除头节点需要特判一下,因为头节点没有前驱节点
代码
/**
* 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 *fast=head,*slow=head;
for(int i=1;i<n;i++){
fast=fast->next;
}
if(fast->next==NULL){
head=head->next;
return head;
}
while(fast->next->next){
fast=fast->next;
slow=slow->next;
}
slow->next=slow->next->next;
return head;
}
};
这篇博客介绍了如何通过快慢指针法在单链表中删除指定位置(n)的节点。首先,快指针移动n-1步,然后同时移动快慢指针,直到快指针的下一个节点为空,这时慢指针指向的就是待删除节点的前驱节点。如果要删除头节点,需要额外处理。代码中展示了具体的实现逻辑。
649

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



