(力扣)LeetCode19. 删除链表的倒数第 N 个结点(C++/C语言)
一、环境说明
- 本文是 LeetCode 19题 : 删除链表的倒数第 N 个结点,使用c语言实现
- 使用双指针方法,算法性能较好。
- 测试环境:Visual Studio 2019
二、代码展示
快慢指针
C++
class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {auto dummy = new ListNode(-1);dummy->next = head;auto r = dummy;for(int i = 0;i<n+1;i++) r = r->next;auto l = dummy;while(r){l=l->next;r=r->next;}l->next = l->next->next;return dummy->next;}
};
C语言
struct ListNode* removeNthFromEnd(struct ListNode* head, int n){struct ListNode *right =head,*left = head,* temp =NULL;//left是删除结点的前一个结点,right比left领先n+1步,temp是待删除结点for(int i = 0;i<n+1;i++){//让right领先n+1步if(NULL==right){//要删除的是头结点left = left->next;//删除操作head->next = NULL;free(head);//释放头结点return left;}right = right->next;}while(right){//right没有走到最右right = right->next;//right和left一起往后走left = left->next;}temp = left->next;//待删除结点left->next = temp->next;//删除操作temp->next = NULL;free(temp);//释放结点return head;
}
朴素做法
C++
class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {auto dummy = new ListNode(-1);dummy->next = head;int m = 0;//包含哑结点的链表长度for(auto t = dummy;t;t=t->next) m++;auto t = dummy;for(int i = 0;i<m-n-1;i++) t = t->next;t ->next = t->next->next;return dummy->next;}
};
三、思路分析
- 使用快慢指针,先让 r i g h t right right 比 l e f t left left 领先 n + 1 n+1 n+1 步,然后 r i g h t right right 和 l e f t left left 一起向右遍历,等 r i g h t right right 走到最后, l e f t − > n e x t left->next left−>next 刚好是倒数第 N N N 个结点。
- 提示,头结点的删除有所不同,删除头结点时, r i g h t right right 走了 n n n 步就已经为 N U L L NULL NULL 了,此时不应该继续遍历,而是让 l e f t = l e f t − > n e x t left=left->next left=left−>next ,并且返回 h e a d head head 。
- 2022 / 11 / 19 2022/11/19 2022/11/19 更新 C + + C++ C++ 做法,使用哑结点,无需特判头结点 。
四、代码分析
- temp是待删除结点,仅仅为了做题,可以不用temp,但是实际工作中,需要养成释放temp的习惯,避免内存泄漏。(C的做法释放了内存,C++没释放内存)
五、AC
六、复杂度分析
- 时间复杂度: O ( m ) O(m) O(m) , m m m 是链表长度, 遍历链表的时间复杂度 O ( m ) O(m) O(m) 。
- 空间复杂度: O ( 1 ) O(1) O(1) , 除若干变量使用的常量级空间,没有使用额外的线性空间。
(力扣)LeetCode19. 删除链表的倒数第 N 个结点(C++/C语言)相关推荐
- 力扣—— 19. 删除链表的倒数第 N 个结点(java)、剑指 Offer 22. 链表中倒数第k个节点(java)
19. 删除链表的倒数第 N 个结点(java) 一.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 输入:head = [1,2,3 ...
- 2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案
2021字节跳动校招秋招算法面试真题解题报告--leetcode19 删除链表的倒数第 n 个结点,内含7种语言答案 1.题目描述 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. ...
- leetcode19. 删除链表的倒数第 N 个结点
一:题目 二:上码 class Solution {public:ListNode* removeNthFromEnd(ListNode* head, int n) {ListNode*cur1 = ...
- 【力扣-JZ22】链表中倒数第k个结点
- 《LeetCode力扣练习》第19题 删除链表的倒数第 N 个结点 Java
<LeetCode力扣练习>第19题 删除链表的倒数第 N 个结点 Java 一.资源 题目: 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 示例 1: 输入:hea ...
- 【力扣(LeetCode)】【C/C++】【19.删除链表的倒数第 N 个结点】
学习时间: 2023年1月30日 题目描述: 题解分享: // 作 者 : 繁 华 倾 夏 #define _CRT_SECURE_NO_WARNINGS #include <stdio.h&g ...
- 代码随想录Day04 | LeetCode24. 两两交换链表中的节点、LeetCode19. 删除链表的倒数第N个节点、LeetCode160. 链表相交、LeetCode142. 环形链表Ⅱ
LeetCode24. 两两交换链表中的节点 力扣题目链接 给你一个链表,两两交换其中相邻的节点,并返回交换后链表的头节点.你必须在不修改节点内部的值的情况下完成本题(即,只能进行节点交换). 示例 ...
- 【链表】leetcode19.删除链表的倒数第N个节点(C/C++/Java/Js)
leetcode19.删除链表的倒数第N个节点 1 题目 2 思路 3 代码 3.1 C++版本 3.2 C版本 3.3 Java版本 3.4 JavaScript版本 4 总结 1 题目 题源链接 ...
- LeetCode-链表-19. 删除链表的倒数第 N 个结点
描述: 19. 删除链表的倒数第 N 个结点 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点. 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4, ...
最新文章
- 卷积神经网络CNN入门【pytorch学习】
- 使用Spring Boot构建RESTFul服务
- 图片跟随鼠标移动并放大js特效
- 计算机图书管理属于计算机应用中的,计算机在图书管理中应用探究.doc
- Wcf Rest Service模板--方法输入输出流数据
- 解决Ubuntu16.04中文乱码问题
- 手机语音混响软件_手机混响软件 如何把微信里的语音转发出去 有什么好用的变声软件 安卓微信语音转发插件...
- MacBook安装虚拟机VMware Fusion
- 新手播音小白,想学播音从什么地方开始?
- 弹出菜单 PopupMenu 的使用
- 疯癫的我到了巅峰 -- 我的成人礼
- 爬虫取中间文本_【实战No.2】1小时打造你自己的网络爬虫
- linux设置软件的路径,linux下查看和设置软件的安装路径
- Java CompletableFuture.runAfterEither任何一个完成就执行Runnable
- 怎样找回u盘里误删的文件
- 串口编程之一: WIN32 API 中串口DCB 结构的介绍
- python中frame用法_python:pandas中dataframe的基本用法汇总
- 分支与循环语句(下)
- 兔将十年大作《赤狐书生》特效解析:青蛙精篇
- 鼠标悬浮在button按钮上时的事件
热门文章
- 基于简单模型KNN——泰坦尼克号获救分析
- JavaFX 边框背景
- [R语言]手把手教你如何绘图(万字)
- Win11系统启动文件夹是空的怎么解决?
- [MongoDB] 按时间分组统计(任意时间段)
- oracle 整理磁盘碎片
- 【虚幻引擎】实现类LOL缓慢扣血血条
- zbursh2021尝新,安装包
- TensorFlow Lite(实战系列一):TFLite Android 迁移训练构建自己的图像识别APP
- 目标检测经典论文——Faster R-CNN论文翻译:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Net