C++速通LeetCode中等第18题-删除链表的倒数第N个结点(最简单含注释)

绝妙!快慢指针法,快指针先走n步(复杂度O(n),O(1)):

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) {
        //设定快慢指针,速度都是1,但是快指针先走n步,慢指针再同时出发,这样一来快指针到结尾时,慢指针到达指定位置
        ListNode* fast = head;
        ListNode* slow = head;
        for(int i = 0; i < n; i++) fast = fast->next;
        if(!fast) return head->next;//n=节点数时,不用移动了,特殊情况直接返回头节点的下一个
        while(fast && fast->next)
        {
            fast = fast->next;
            slow = slow->next;
        }//循环结束的slow就是答案要求的起始位置
        if(!slow->next) return nullptr;
        slow->next = slow->next->next;
        return head;
    }
};
相关推荐
王老师青少年编程6 小时前
csp信奥赛C++高频考点专项训练:【二分答案】案例2:木材加工
c++·二分答案·csp·高频考点·信奥赛·木材加工
海石7 小时前
单调栈复健,顺便,牺牲一下吧,空间复杂度!一切献给AC
算法·leetcode
海石7 小时前
JS击败94%,Hard题想不到动态规划,那就用数组和栈试试
算法·leetcode
aaPIXa6227 小时前
C++模板元编程:编译期计算Fibonacci数列
java·开发语言·c++
Augustzero7 小时前
`co_await` 按下暂停键之后:从零看懂 C++20 协程
c++·后端
知无不研8 小时前
c语言和c++中的静态关键字
开发语言·c++·静态关键字
思麟呀9 小时前
在C++基础上理解CSharp-7
java·jvm·c++·c#
2601_949818099 小时前
Vector从入门到应用(C++ STL动态数组万字全解
开发语言·c++
汉克老师9 小时前
GESP2026年6月认证C++八级( 第三部分编程题(1、线网建设))精讲
c++·最小生成树·排序·kruskal·并查集·gesp8级
胖大和尚9 小时前
Linux 内核工程师、HPC工程师、C++工程师
c++·kernel·hpc