力扣HOT100之链表:19. 删除链表的倒数第 N 个结点

这道题的思路比较简单,直接定义一个虚拟头节点,然后再定义快慢指针,快慢指针在初始状态下都指向虚拟头节点,然后让快指针先走n步,慢指针停在原地,然后快慢指针同步前进,当快指针fast指向最后一个节点时,慢指针slow指向待删除的节点的上一个节点,然后直接将待删除节点的后继节点(slow -> next -> next)赋值给slow -> next即可。下面用几个例子说明下这种方法的正确性。

cpp 复制代码
/**
 * 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* virtual_head = new ListNode();
        virtual_head -> next = head;
        ListNode* fast = virtual_head, * slow = virtual_head;
        while(n--)
            fast = fast -> next;
        while(fast -> next){
            slow = slow -> next;
            fast = fast -> next;
        }
        slow -> next = slow -> next -> next;
        return virtual_head -> next;
    }
};
相关推荐
月明长歌2 小时前
【码道初阶】Leetcode155踩坑最小栈问题:最小栈:算法对了,却输给了 Java 的 “==“?
java·算法·
我送炭你添花2 小时前
Pelco KBD300A 模拟器:05.校验算法终极对比 + 完整 100+ 指令封装 + KBD300A 所有隐藏功能函数化
python·算法·自动化·运维开发
DuHz2 小时前
汽车FMCW雷达互扰下的快速目标检测:谱峰累积法与泊松CFAR精读与推导
论文阅读·算法·目标检测·汽车·信息与通信·信号处理
2401_837088502 小时前
算法边界情况处理套路总结
算法
烛衔溟2 小时前
C语言图论:最短路径算法
c语言·算法·图论·dijkstra·bellman-ford·最短路径
烛衔溟2 小时前
C语言图论:最小生成树算法
c语言·算法·图论·最小生成树·kruskal·prim
Yzzz-F2 小时前
算法竞赛进阶指南 进阶搜索
算法·深度优先
带鱼吃猫3 小时前
数据结构:单链表 / 双链表的结构、接口实现与顺序表对比
数据结构·链表
weixin_437546333 小时前
注释文件夹下脚本的Debug
java·linux·算法
月明长歌3 小时前
【码道初阶】【LeetCode 572】另一棵树的子树:当“递归”遇上“递归”
算法·leetcode·职场和发展