在O(1)时间复杂度删除链表节点(LintCode)
来源:互联网 发布:linux recv函数 编辑:程序博客网 时间:2024/06/05 11:03
题目来源:LintCode
原题地址:http://www.lintcode.com/zh-cn/problem/delete-node-in-the-middle-of-singly-linked-list/
题目:
给定一个单链表中的表头和一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。并在删除该节点后,返回表头。
您在真实的面试中是否遇到过这个题?Yes
样例
给定 1->2->3->4
,和节点 3
,返回 1->2->4
。
难度级别:
容易
容易
思路分析:
本题的做法相当简单,因此我个人觉得这里其实就是一个技巧的问题,不算什么技术。一旦你知道了这么干是可以的,类似的情形很容易就可以想到了。
我采用的方式是将下一个节点的属性值复制到要删除的节点,那么就会出现两个属性完全相同的节点。我们只要把下一个节点删除就可以了。
本题的做法相当简单,因此我个人觉得这里其实就是一个技巧的问题,不算什么技术。一旦你知道了这么干是可以的,类似的情形很容易就可以想到了。
我采用的方式是将下一个节点的属性值复制到要删除的节点,那么就会出现两个属性完全相同的节点。我们只要把下一个节点删除就可以了。
实现代码:
/** * Definition of ListNode * class ListNode { * public: * int val; * ListNode *next; * ListNode(int val) { * this->val = val; * this->next = NULL; * } * } */class Solution {public: /** * @param node: a node in the list should be deleted * @return: nothing */ void deleteNode(ListNode *node) { ListNode *tmp = node->next; node->val = node->next->val; node->next = node->next->next; delete tmp; tmp = NULL; return ; }};
代码说明:
需要说明的是,在实际的复杂场景应用这种方式的时候,如果节点中有指针的存在的话,一定要采用深拷贝的方式进行复制,因为后一个节点的内存是要被释放的,如果是浅拷贝的话,会导致寻址错误,即指针指向的地址空间已经被释放了,进行非法访问了,程序就无法正常运行了。
需要说明的是,在实际的复杂场景应用这种方式的时候,如果节点中有指针的存在的话,一定要采用深拷贝的方式进行复制,因为后一个节点的内存是要被释放的,如果是浅拷贝的话,会导致寻址错误,即指针指向的地址空间已经被释放了,进行非法访问了,程序就无法正常运行了。
0 0
- LintCode-在O(1)时间复杂度删除链表节点
- lintcode 在O(1)时间复杂度删除链表节点
- LintCode:在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点-LintCode
- LintCode-在O(1)时间复杂度删除链表节点
- Lintcode 在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点 -LintCode
- 在O(1)时间复杂度删除链表节点(LintCode)
- lintcode 372 在o(1)时间复杂度删除链表节点
- LintCode解题笔记 - 在O(1)时间复杂度删除链表节点
- lintcode-在O(1)时间复杂度删除链表节点-327
- LintCode-剑指Offer-(372)在O(1)时间复杂度删除链表节点
- lintCode(372)——在O(1)时间复杂度删除链表节点
- lintcode在O(1)时间复杂度删除该链表节点。
- lintcode——在O(1)时间复杂度删除链表节点
- [LintCode]372.在O(1)时间复杂度删除链表节点
- Eclipse插件集合及其安装方法
- 用栈来实现表达式的计算
- jquery关于select框的取值和赋值
- hdu 4631 Sad Love Story(暴力)
- 如何在C++中实现求两个整数的最大公约数和最小公倍数
- 在O(1)时间复杂度删除链表节点(LintCode)
- POJ 3126 Prime Path
- vlsm的划分
- 正试图在 os 加载程序锁内执行托管代码。不要尝试在 DllMain 或映像初始化函数内运行托管代码,这样做会导致应用程序挂起。问题的解决方法!
- 二十三种设计模式之行为型模式之模板方法
- lintcode:3 Sum
- 转义字符
- StringBuffer清空操作效率分析
- HttpWatch工具简介