[LintCode]372.在O(1)时间复杂度删除链表节点
2017-07-13 11:01
387 查看
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。
样例 Linked list is
and given node
delete the node in place
思路:关于单链表的删除,通常先从链表的头节点开始顺序找到被删节点的前驱节点,然后再删除节点,主要时间耗费在查找操作上,时间复杂度为O(n);
其实,也可以通过删除节点的后继节点来实现,实质就是将其后继节点的值赋予自身,然后删除后继节点,使得时间复杂度为O(1)。
样例 Linked list is
1->2->3->4,
and given node
3,
delete the node in place
1->2->4
思路:关于单链表的删除,通常先从链表的头节点开始顺序找到被删节点的前驱节点,然后再删除节点,主要时间耗费在查找操作上,时间复杂度为O(n);
其实,也可以通过删除节点的后继节点来实现,实质就是将其后继节点的值赋予自身,然后删除后继节点,使得时间复杂度为O(1)。
/** * 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 *p=node->next; node->val=node->next->val; node->next=p->next; delete p; } };
相关文章推荐
- 372. 在O(1)时间复杂度删除链表节点 (delete-node-in-the-middle-of-singly-linked-list)(c++)----lintcode面试题之链表
- 【LintCode 简单】372. 在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- lintcode——在O(1)时间复杂度删除链表节点
- lintcode在O(1)时间复杂度删除该链表节点。
- 在O(1)时间复杂度删除链表节点 -LintCode
- 在O(1)时间复杂度删除链表节点-LintCode
- Lintcode 372. O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点(LintCode)
- Lintcode 在O(1)时间复杂度删除链表节点
- python_lintcode_372在O(1)时间复杂度删除链表节点_174删除链表中倒数第n个节点
- [lintcode]-链表 在O(1)时间复杂度删除链表节点
- lintcode-在O(1)时间复杂度删除链表节点-327
- LintCode-372.在O(1)时间复杂度删除链表节点
- LintCode:在O(1)时间复杂度删除链表节点
- LintCode 在O(1)时间复杂度删除链表节点
- [LintCode] 在O(1)时间复杂度删除链表节点
- lintCode(372)——在O(1)时间复杂度删除链表节点
- LintCode_372_在O(1)时间复杂度删除链表节点
- 在O(1)时间复杂度删除链表节点