19.删除链表的倒数第N个节点

19.删除链表的倒数第N个节点 ,第1张

19.删除链表的倒数第N个节点 题目描述:

给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。

示例:

思路:

使用双指针,先定义一个虚拟头节点指向head,然后定义两个指针(fast和slow),如果要删除倒数第n个节点,让fast移动n+1步,然后让fast和slow同时移动,直到fast指向链表末尾。此时slow所指的就是需要删除的结点,删掉即可。

示意图:

以力扣给出的第一个示例为例


代码如下:

class Solution {
public:
    ListNode *removeNthFromEnd(ListNode *head, int n) {
        ListNode *dummyNode = new ListNode();
        dummyNode->next = head;
        ListNode *fast = dummyNode;
        ListNode *slow = dummyNode;
        //fast先走n步
        while (n-- && fast != NULL) {
            fast = fast->next;
        }
        fast = fast->next;  //fast 走n+1 步
        //fast slow 一起向前移动,直到fast为空
        while (fast != NULL) {
            fast = fast->next;
            slow = slow->next;
        }
        //删除slow的下一个结点
        slow->next = slow->next->next;
        return dummyNode->next;
    }
};

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/872928.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存