【剑指offer】以o(1)复杂度删除啊链表的节点,C++实现(链表)
0.简介
本文是牛客网《剑指offer》刷题笔记。
1.题目
在O(1)时间内删除链表节点。
2.思路

前提条件:删除的节点在链表上;边界条件:链表不为空和节点不为空;删除非尾节点i:删除节点i的下一个节点j的内容复制到节点i,然后节点i的指针指向节点j的下一个节点,删除节点j;删除尾节点i:顺序遍历得到被删节点的前序节点,然后删除被删除节点,前序节点指向nullptr。
3.code
1 void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted)
2 {
3 if(!pListHead || !pToBeDeleted)
4 return;
5
6 // 要删除的结点不是尾结点
7 if(pToBeDeleted->m_pNext != nullptr)
8 {
9 ListNode* pNext = pToBeDeleted->m_pNext;
10 pToBeDeleted->m_nValue = pNext->m_nValue;
11 pToBeDeleted->m_pNext = pNext->m_pNext;
12
13 delete pNext;
14 pNext = nullptr;
15 }
16 // 链表只有一个结点,删除头结点(也是尾结点)
17 else if(*pListHead == pToBeDeleted)
18 {
19 delete pToBeDeleted;
20 pToBeDeleted = nullptr;
21 *pListHead = nullptr;
22 }
23 // 链表中有多个结点,删除尾结点
24 else
25 {
26 ListNode* pNode = *pListHead;
27 while(pNode->m_pNext != pToBeDeleted)
28 {
29 pNode = pNode->m_pNext;
30 }
31
32 pNode->m_pNext = nullptr;
33 delete pToBeDeleted;
34 pToBeDeleted = nullptr;
35 }
36 }
【剑指offer】以o(1)复杂度删除啊链表的节点,C++实现(链表)的更多相关文章
- 【剑指Offer面试题】 九度OJ1389:变态跳楼梯
转自:http://www.myexception.cn/program/1973966.html 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2331解决:1332 题目描述: 一只青蛙一次 ...
- 【剑指Offer面试题】 九度OJ1518:反转链表
与其非常快写出一段漏洞百出的代码,倒不如细致分析再写出鲁棒的代码. 提前想好測试用例(输入非空等等)进行測试改动代码. 题目链接地址: http://ac.jobdu.com/problem.php? ...
- 【剑指Offer面试题】 九度OJ1368:二叉树中和为某一值的路径
题目链接地址: http://ac.jobdu.com/problem.php? pid=1368 题目1368:二叉树中和为某一值的路径 时间限制:1 秒内存限制:32 兆特殊判题:否提交:2252 ...
- 【剑指Offer面试题】 九度OJ1517:链表中倒数第k个结点
鲁棒性是指程序可以推断输入是否符合规范要求,并对不和要求的输入予以 合理的处理. 题目链接地址: http://ac.jobdu.com/problem.php?pid=1517 题目1517:链表中 ...
- 【剑指Offer面试题】 九度OJ1385:重建二叉树
题目链接地址: pid=1385">http://ac.jobdu.com/problem.php?pid=1385 题目1385:重建二叉树 时间限制:1 秒内存限制:32 兆特殊判 ...
- 【剑指Offer面试题】 九度OJ1371:最小的K个数
题目链接地址: http://ac.jobdu.com/problem.php?pid=1371 题目1371:最小的K个数 时间限制:1 秒内存限制:32 兆特殊判题:否提交:5938解决:1265 ...
- 【剑指Offer面试题】 九度OJ1516:调整数组顺序使奇数位于偶数前面
题目链接地址: http://ac.jobdu.com/problem.php?pid=1516 题目1516:调整数组顺序使奇数位于偶数前面 时间限制:1 秒内存限制:128 兆特殊判题:否提交:2 ...
- 【剑指Offer面试题】九度OJ1384:二维数组中的查找
下决心AC全部剑指offer面试题. 九度OJ面试题地址:http://ac.jobdu.com/hhtproblems.php 书籍:何海涛--<剑指Offer:名企面试官精讲典型编程题> ...
- 【剑指Offer面试编程题】题目1519:合并两个排序的链表--九度OJ
题目描述: 输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则. (hint: 请务必使用链表.) 输入: 输入可能包含多个测试样例,输入以EOF结束. 对于每 ...
- 【剑指Offer面试题】 九度OJ1510:替换空格
c/c++ 中的字符串以"\0"作为结尾符.这样每一个字符串都有一个额外字符的开销. 以下代码将造成内存越界. char str[10]; strcpy(str, "01 ...
随机推荐
- 简单springmvc在Eclipse的Tomcat上部署404error,直接在Tomcat上部署可以访问
在Eclipse工程下的.setting文件夹的org.eclipse.wst.common.component这个文件,如下则可以访问: <?xml version="1.0&quo ...
- Python之面向对象进阶------反射(Day26)
一 classmethod class Classmethod_Demo(): role = 'dog' @classmethod def func(cls): print(cls.role) Cla ...
- 服务中的 API 网关(API Gateway)
我们知道在微服务架构风格中,一个大应用被拆分成为了多个小的服务系统提供出来,这些小的系统他们可以自成体系,也就是说这些小系统可以拥有自己的数据库,框架甚至语言等,这些小系统通常以提供 Rest Api ...
- 20145231《Java程序设计》第三次实验报告
实验三 敏捷开发与XP实现 实验内容 XP基础 XP核心实践 相关工具 实验要求 了解敏捷开发的基本方法以及XP软件开发的相关准则:了解代码编写的标准和原则:体会结对编程的好处: 实践体会版本控制的方 ...
- axios拦截器/http
Interceptors //处理请求或响应之前拦截请求或响应. //添加一个请求拦截器 axios.interceptors.request.use(function (config) { //在请 ...
- Python3.4 用 pip 安装lxml时出现 “Unable to find vcvarsall.bat ”
我的python版本是Python 3.5 该问题的产生是在windows环境中,python 的 Setup需要调用一个vcvarsall.bat的文件,该文件需要安装c++编程环境才会有.网上的方 ...
- Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c
Android系统--输入系统(二)必备Linux知识_实现inotify_epoll.c 课后作业 1. 编写 inotify_epoll.c, 用它来监测tmp/目录: 有文件被创建/删除, 有文 ...
- 让iOS项目允许使用http协议请求
苹果官方已经默认不让开发者使用不安全的http通信协议了,而是建议开发者使用安全的https协议.若我们还是需要使用http协议可以这样配置XCode: 1.打开info.plist文件 2.点击加号 ...
- Mybatis入门2-动态代理实现CRUD
MyBatis动态代理生成DAO的步骤: 1) 编写数据管理的接口XxxMapper 2) 编写该接口对应的Mapper.xml a) namespace必须与Mapper接口全名一致 b) stat ...
- linux crontab使用
1.查看.编辑和删除 cron把命令行保存在crontab(cron table)文件里,这个文件通常在 /etc 目录下. 每个系统用户都可以有自己的crontab(在 /var/spool/cro ...