经典算法学习——在O(1)时间删除链表节点
来源:互联网 发布:淘宝退货填单号页面 编辑:程序博客网 时间:2024/06/03 13:26
这道算法题同样是剑指Offer中的一道题,题目描述为:给定单向链表的头指针和一个节点指针,定义一个函数在O(1)时间内删除该节点。其实我们知道,想要在单向链表中找到某个节点并删除它,复杂度为O(n),因为必须从头遍历才能找到它(最重要的是因为要找到它的前一个节点。)所以想要O(1)完成,必须想其他的方法。
目前重要的一个信息就是已经有一个节点指针指向当前要删除的节点。这就比较好办了。我们可以非常方便的找到它的后继节点,然后把后继节点的值赋值给当前要删除的节点,然后再去删除那个后继节点。这样,我们看起来就像是删除了原来的那个节点。有点类似于移花接木。
核心代码如下:
void DeleteNode(Node **pListHead, Node *pToBeDeleted){ // 把后一个节点的值复制到要删除 pToBeDeleted->element = pToBeDeleted->next->element; // 使用delete释放后一个节点的内存 delete pToBeDeleted->next; // 修改指针 pToBeDeleted->next = pToBeDeleted->next->next;}
完整代码示例上传至 https://github.com/chenyufeng1991/DeleteNodeInO1 。
2 0
- 经典算法学习——在O(1)时间删除链表节点
- 剑指Offer算法实现之十三:在O(1)时间删除链表节点
- lintCode(372)——在O(1)时间复杂度删除链表节点
- lintcode——在O(1)时间复杂度删除链表节点
- 剑指offer 面试题13—在O(1)时间删除链表节点
- 在O(1)时间删除链表节点
- 在O(1)时间删除链表节点
- 在O(1)时间删除链表的节点
- 在O(1时间删除链表节点
- 在O(1)时间删除链表节点
- 剑指offer13-在O(1)时间删除链表节点
- 在O(1)时间删除链表节点
- 题目:在O(1)时间复杂度删除链表节点
- LintCode-在O(1)时间复杂度删除链表节点
- lintcode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点
- 在O(1)时间删除链表节点
- HDU 5834 Magic boy Bi Luo with his excited tree (树形DP)
- 浙大PAT甲级 1031
- 阿里云与tomcat实现301重定向
- java实现堆排序(2016年腾讯内推笔试的一道算法题)
- java编程自学记录(day09)
- 经典算法学习——在O(1)时间删除链表节点
- java wait和notify及 synchronized sleep 总结
- 算法竞赛入门经典-STL数据结构的使用
- Mysql笔记-事务
- 树形DP______Rebuilding Roads( POJ 1947 )
- ie浏览器(包括微软的最新的edge)最ajax请求具有缓存机制
- Android:Ubuntu下执行Adb命令找不到设备
- 浙大PAT甲级 1032
- hdfs 文件提交与mr作业提交流程分析