力扣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;
    }
};
相关推荐
W23035765733 小时前
经典算法:最长上升子序列(LIS)深度解析 C++ 实现
开发语言·c++·算法
minji...3 小时前
Linux 线程同步与互斥(三) 生产者消费者模型,基于阻塞队列的生产者消费者模型的代码实现
linux·运维·服务器·开发语言·网络·c++·算法
语戚4 小时前
力扣 968. 监控二叉树 —— 贪心 & 树形 DP 双解法递归 + 非递归全解(Java 实现)
java·算法·leetcode·贪心算法·动态规划·力扣·
skywalker_114 小时前
力扣hot100-7(接雨水),8(无重复字符的最长子串)
算法·leetcode·职场和发展
bIo7lyA8v6 小时前
算法稳定性分析中的输入扰动建模的技术9
算法
CoderCodingNo6 小时前
【GESP】C++三级真题 luogu-B4499, [GESP202603 三级] 二进制回文串
数据结构·c++·算法
sinat_286945196 小时前
AI Coding 时代的 TDD:从理念到工程落地
人工智能·深度学习·算法·tdd
炽烈小老头6 小时前
【 每天学习一点算法 2026/04/12】x 的平方根
学习·算法
ASKED_20196 小时前
从排序到生成:腾讯广告算法大赛 2025 baseline解读
人工智能·算法