19. 删除链表的倒数第 N 个结点
19. 删除链表的倒数第 N 个结点
题目链接:19. 删除链表的倒数第 N 个结点
代码如下:
/**
* 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 *Head=new ListNode;
Head->next=head;
ListNode *slow=Head,*fast=Head;
//让fast先找n个节点
int count=0;
while(count<n)
{
if(fast&&fast->next)
fast=fast->next;
count++;
}
ListNode *pre=nullptr;//保存slow的前驱节点,便于删除
//fast走到最后,slow指向的即为倒数第n个节点
while(slow&&fast)
{
pre=slow;
slow=slow->next;
fast=fast->next;
}
//找到了倒数第n个节点
if(slow)
{
pre->next=slow->next;
delete slow;
}
return Head->next;
}
};
原文地址:https://blog.csdn.net/weixin_45256307/article/details/135451713
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!