自学内容网 自学内容网

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)!