lintcode

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

2018-01-04  本文已影响7人  和蔼的zhxing

给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在O(1)时间复杂度删除该链表节点。

Linked list is 1->2->3->4, and given node 3, delete the node in place 1->2->4

复制节点的值

删除节点一般的做法是找到要删除节点的前一个节点,然后把这个节点的next指针指向要删除的节点的下一个节点,一般都是这样做的,这个题要求O(1)的时间复杂度,显然是不允许遍历搜索的,而且给定的是节点的指针。
我们要删除这个节点,但是我们通过操作只能删除它的下一个节点,那我们能不能把下一个节点的数据拷贝过来到这个节点,然后把下个节点删除,这样就相当于把这个节点删除了
我怎么会想到这个方法呢?哎,刷题容易怀疑智商!
写起来就不是一般的简单了,题目中默认此节点不是表头或表尾,所以这种方法是完全可以的,如果是表尾的话就不好玩了!

  void deleteNode(ListNode * node) {
        node->val=node->next->val;
        node->next=node->next->next;
        // write your code here
    }
上一篇 下一篇

猜你喜欢

热点阅读