LintCode解题笔记 - 在O(1)时间复杂度删除链表节点
2015-07-08 21:32
465 查看
给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。
原文链接: http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/
思路,传统意义上,删除当前节点是从头结点head遍历,匹配到目标节点后删除,但是时间复杂度是O(n)。如果是删除下一个节点,时间复杂度则是O(1),因此考虑将下一个节点立面的data数据拷贝到当前节点(当前节点是带删除节点,其中数据可以覆盖),然后删除下一个节点。
原文链接: http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/
思路,传统意义上,删除当前节点是从头结点head遍历,匹配到目标节点后删除,但是时间复杂度是O(n)。如果是删除下一个节点,时间复杂度则是O(1),因此考虑将下一个节点立面的data数据拷贝到当前节点(当前节点是带删除节点,其中数据可以覆盖),然后删除下一个节点。
class Solution { public: /** * @param node: a node in the list should be deleted * @return: nothing */ void deleteNode(ListNode *node) { // write your code here ListNode *p = node->next; node->val = p->val; node->next = p->next; delete p; } };
相关文章推荐
- js使用cookies的例子
- Oracle数据库之开发PL/SQL子程序和包
- centos6.3 安装python2.7.3
- LeetCode-Add Two Numbers-解题报告
- 在mac上构建Jenkins+unity3d+xcode发布流程
- iOS - 地图 - 百度地图 - 准备阶段
- LeetCode Binary Tree Right Side View
- [1]开发准备-使用C#.NET开发基于本地数据缓存的PC客户端
- 推荐一个免费的构建Beyesian贝叶斯概率网络的JAVA,C#,.NET, R, Matlab,Python,Ruby 的API
- ios8自适应布局
- Section 1.2.2 Milking Cows
- 什么是单模光纤和多模光纤?各有什么优缺点?
- 堆栈帧的组织——C/C++内存管理必须掌握
- PID控制原理
- LeetCode-Median of Two Sorted Arrays-解题报告
- 算法复习之快速排序
- poj 2689
- 《opencv入门》
- 运用代理模式,实现相同的操作方法,可以增加自己的逻辑
- java.lang.NoClassDefFoundError: Ljavax/transaction/TransactionManager