如题:

这道题要求在O(1)时间内删除链表节点。

常规解法是遍历链表,找到所需元素,使其前继节点的next指针指向待删节点的next指针,时间复杂度位O(n),不满足要求。除了遍历之外,还有一种更好的办法删除结点,如果结点存在后继元素的话,可以直接将后继元素所有值复制到待删元素,这时候直接删除后继即可,如果位于尾节点,则遍历链表,对于链表中只有一个元素的情况,这时候,待删结点即是头节点又是尾节点则需要特殊处理。这种方式的平均时间复杂度为O((n-1)O(1) + O(n))/n) = O(1),满足要求。

下面是本题c++编码:

void DeleteNode(ListNode **pListHead, ListNode *pToBeDeleted)
{if (!pListHead || !pToBeDeleted)return;//要删除的节点不是尾节点if (pToBeDeleted->m_pNext != nullptr){ListNode *pNext = pToBeDeleted->m_pNext;pToBeDeleted->m_nValue = pNext->m_nValue;pToBeDeleted->m_pNext = pNext->m_pNext;delete pNext;pNext = nullptr;}//链表只有一个节点,删除头节点(也是尾节点)else if (*pListHead == pToBeDeleted){delete pToBeDeleted;pToBeDeleted = nullptr;*pListHead = nullptr;}//链表中有多个节点,删除尾节点else{ListNode *pNext = *pListHead;while (pNext->m_pNext != pToBeDeleted){pNext = pNext->m_pNext;}pNext->m_pNext = nullptr;delete pToBeDeleted;pToBeDeleted = nullptr;}
}

=============================================================================================

Linux应用程序、内核、驱动、后台开发交流讨论群(745510310),感兴趣的同学可以加群讨论、交流、资料查找等,前进的道路上,你不是一个人奥^_^。

《剑指offer》c++版本 18.删除链表的结点相关推荐

  1. 剑指Offer - 面试题18. 删除链表的节点

    1. 题目 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 注意:此题对比原题有改动 示例 1: 输入: head = [4,5,1,9], val ...

  2. 剑指offer面试题18. 删除链表的节点(双指针)(链表)

    题目描述 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点. 返回删除后的链表的头节点. 思路 详见链接 代码 class Solution:def deleteNode(self, ...

  3. 剑指offer(C++)-JZ18:删除链表的节点(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 给定单向链表的头指针和一个要删除的节点的值,定义一个函数删除该节点.返回删除后的链表 ...

  4. 剑指offer(C++)-JZ76:删除链表中重复的结点(数据结构-链表)

    作者:翟天保Steven 版权声明:著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处 题目描述: 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回 ...

  5. 剑指offer面试题[57]-删除链表中重复的结点

    题目描述 在一个排序的链表中,存在重复的结点,请删除该链表中重复的结点,重复的结点不保留,返回链表头指针. 例如,链表1->2->3->3->4->4->5 处理后 ...

  6. 剑指offer——面试题56:链表中环的入口

    剑指offer--面试题56:链表中环的入口 Solution1: 非常经典的快慢指针套路题.下面这个链接讲解的很详细.其实问题的关键在于为什么快指针的速度一定是慢指针的2倍,3倍或4倍行不行?? 快 ...

  7. 【重点递归】剑指offer——面试题18:树的子结构

    剑指offer--面试题18:树的子结构 Solution1: 此题答案是抄的书上的,要记忆并熟练运用关于二叉树的递归思想!!! /* struct TreeNode {int val;struct ...

  8. 《剑指offer》刷题——【链表】从尾到头打印链表

    <剑指offer>刷题--[链表]-<从尾到头打印链表> 问题分析: 递归实现: 1. 无返回值 2. 有返回值(ArrayList) 问题分析: 从头到尾打印链表比较简单,那 ...

  9. 剑指 Offer II 027. 回文链表

    剑指 Offer II 027. 回文链表: 题目链接 :剑指 Offer II 027. 回文链表 题目:给定一个链表的 头节点 head ,请判断其是否为回文链表. 如果一个链表是回文,那么链表节 ...

最新文章

  1. 样式集(11)注册页面样式,全部代码附效果图
  2. css property 和 attribute 的区别
  3. 最接近原点的 k 个点_第K个最接近原点的位置
  4. 墙裂推荐 | 漫画解读Elasticsearch原理,看完你就懂
  5. VMware vSphere常见问题汇总(十九)
  6. 【毕业设计】PHP课程网站络管理系统(源代码+论文)
  7. Ogre 1.7 SDKTRAY 初探
  8. 用python设计简易计算器代码_Python简易计算器制作方法代码详解
  9. oracle_sqlserver和mysql获取表外键的方法_MYSQL教程如何获取SqlServer2005表结构(字段,主键,外键,递增,描述)...
  10. 金庸群侠传 3小时爆机
  11. 六款Linux常用远程连接工具介绍,看看哪一款最适合你
  12. 蓝桥杯python试题集VIP版
  13. java flush是什么意思,java – JPA中flush的确切目的是什么
  14. 二牛频道-收集分享各类不花钱的各类绿色优质软件-互联网资源分享
  15. 白蛋白纳米-超声微泡载组织型纤溶酶原激活物基因靶向制备研究
  16. Java java.sql.SQLSyntaxErrorException:Duplicate column name ‘xxx‘问题解决
  17. 直接裁7000!任正非:我不要你觉得,我要我觉得
  18. linux重启搜狗输入法命令
  19. AltiumDesigner覆铜挖空技巧总结
  20. 消防系统数据服务器,数据中心消防安全措施必须齐全完备

热门文章

  1. setTimeout延时0毫秒的作用
  2. C# 仿金山毒霸启动和关闭淡入淡出效果
  3. Oracle错误大全(目前自己所碰到的)
  4. python大数据论坛_干货 | Python+大数据计算平台,PyODPS架构手把手教你搭建
  5. vuefullcalendar怎么判断切换上下月_六种区分对联上下联的方法
  6. 【控制】控制学习路线资源整理
  7. 3.9 YOLO算法-深度学习第四课《卷积神经网络》-Stanford吴恩达教授
  8. 8.3 算法流程与评估-机器学习笔记-斯坦福吴恩达教授
  9. UDP千兆以太网FPGA_verilog实现(四、代码前期准备-UDP和IP协议构建)
  10. 【MORE协议】基于MORE的改进协议设计的MATLAB仿真