您的位置:首页 > 其它

[LintCode]372.在O(1)时间复杂度删除链表节点

2017-07-13 11:01 387 查看
给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在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;
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: