您的位置:首页 > 教育 > 锐评 > 【leetcode】删除链表的倒数第 N 个结点-25-5

【leetcode】删除链表的倒数第 N 个结点-25-5

2025/8/22 8:08:39 来源:https://blog.csdn.net/qq_43552933/article/details/141271284  浏览:    关键词:【leetcode】删除链表的倒数第 N 个结点-25-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:int delN;int curN;bool isDelete=false;void recurveList(ListNode* a,ListNode* b){if(b==nullptr){return ;}recurveList(b,b->next);curN+=1;if(curN==delN){ListNode* c=b;a->next=c->next;delete b;isDelete=true;}}ListNode* removeNthFromEnd(ListNode* head, int n) {delN=n;curN=0;if(!head->next){delete head;return nullptr;}ListNode* res=head;recurveList(head,head->next);if(!isDelete){ListNode* temp=head;res=head->next;delete  temp;}return res;}
};

在这里插入图片描述
方法:二次遍历

/*** 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) {int sumLength=0;ListNode* temp=head;while(temp){sumLength+=1;temp=temp->next;}temp=head;int leftLength=sumLength-n;if(leftLength==0){ListNode* deleteNode=head;head=head->next;delete deleteNode;return head;}int i=1;temp=head;while(i<leftLength){temp=temp->next;i+=1;}ListNode* deleteNode=temp->next;temp->next=temp->next->next;delete deleteNode;return head;}
};

在这里插入图片描述
方法:双指针+对称

/*** 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=new ListNode(0,head);ListNode* slow=fast;ListNode* res=fast;while(n>0){n--;fast=fast->next;}while(fast->next){fast=fast->next;slow=slow->next;}ListNode* temp=slow->next;slow->next=slow->next->next;delete temp;temp=res;res=res->next;delete temp;return res;}
};

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com