news 2026/2/15 12:55:56

day138—快慢指针—删除链表的倒数第N个结点(LeetCode-19)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
day138—快慢指针—删除链表的倒数第N个结点(LeetCode-19)

题目描述

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

示例 1:

输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]

示例 2:

输入:head = [1], n = 1输出:[]

示例 3:

输入:head = [1,2], n = 1输出:[1]

提示:

  • 链表中结点的数目为sz
  • 1 <= sz <= 30
  • 0 <= Node.val <= 100
  • 1 <= n <= sz

解决方案:

这段代码的核心功能是删除单链表中倒数第 n 个节点,采用「虚拟头节点 + 快慢指针」的经典方法实现,时间复杂度O(n)、空间复杂度O(1),能高效且优雅地处理删除头节点等边界情况。

核心逻辑

代码通过快慢指针制造n步的间距,让快指针先走到指定位置,再同步移动快慢指针,最终定位到倒数第 n 个节点的前驱节点,完成删除:

  1. 虚拟头节点初始化:创建虚拟头节点node并指向原链表头head,避免删除原头节点时的边界问题;
  2. 快慢指针拉开间距:快指针fast先从虚拟头节点出发,向前移动n步,此时快慢指针间距为n
  3. 同步移动找前驱:快慢指针同步向后移动,直到快指针走到链表末尾(fast->next为空),此时慢指针slow恰好指向「倒数第 n 个节点的前驱节点」;
  4. 删除目标节点:将慢指针的next指向其下下个节点,跳过倒数第 n 个节点,完成删除;
  5. 返回结果:返回虚拟头节点的next(即删除后的链表头)。

总结

  1. 核心思路:利用快慢指针的n步间距,将 “找倒数第 n 个节点” 转化为 “找正数的前驱节点”,避免先遍历统计长度的二次遍历;
  2. 关键设计:虚拟头节点解决了 “删除原链表头节点” 的边界问题,无需额外判断;
  3. 效率特点:仅一次遍历完成查找和删除,时间O(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* node=new ListNode(); node->next=head; ListNode* slow=node; ListNode* fast=node; for(int i=0;i<n;i++){ fast=fast->next; } while(fast->next){ fast=fast->next; slow=slow->next; } //ListNode* nxt=slow->next; slow->next=slow->next->next; //delete nxt; return node->next; } };
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/2/14 1:42:01

【计算机毕业设计案例】基于springboot的宠物医院中小型宠物医院、连锁宠物诊疗机构管理系统的设计与实现(程序+文档+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/2/5 7:30:41

Android设备与Mac/Docker全连接指南:有线到无线的完整方案

Android设备与Mac/Docker全连接指南&#xff1a;有线到无线&#x1f4ca; 连接方式对比表&#x1f50c; 方式一&#xff1a;USB有线连接&#xff08;基础方式&#xff09;适用场景操作步骤&#x1f4e1; 方式二&#xff1a;WiFi无线连接2.1 Android 10及以下版本&#xff08;需…

作者头像 李华
网站建设 2026/2/6 11:43:54

解码WIFI模块与IoT云平台

WIFI模块原理与应用 引言 随着物联网技术快速发展&#xff0c;越来越多的智能设备需要通过无线方式接入互联网。在众多无线通信方案中&#xff0c;**WIFI模组&#xff08;ESP8266/ESP32系列&#xff09;**因其成熟的生态和广泛的应用&#xff0c;成为实现远程控制、数据采集等…

作者头像 李华
网站建设 2026/2/14 14:22:04

【课程设计/毕业设计】基于Java+SpringBoot城市化自修室管理系统基于springboot的城市化自修室管理系统【附源码、数据库、万字文档】

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华