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

来源:互联网 发布:2015公安部上牌数据 编辑:程序博客网 时间:2024/06/05 19:59

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

思路:给定一个节点的地值node,想要将它删除,最好的方法就是下一个节点覆盖这个节点,这个节点的信息就不存在了,就相当于删掉了这个节点。如此一来node的下一个节点有了两个一摸一样的节点保存它的信息,在链表的next连接时,实际上不连接的是之前要被删的节点的下一个,但下一个节点的信息已经保存在了这个节点上。

代码:

class Solution {
public:
    /**
     * @param node: a node in the list should be deleted
     * @return: nothing
     */
    void deleteNode(ListNode *node) {
        // write your code here
        
        node->val=node->next->val;
        node->next=node->next->next;
    }

感想:这个题很奇妙的一点就是将这个要被删除的节点变成了和它下一个节点一摸一样的节点,不连接的是它的下一个节点但并没有造成信息的丢失。这个代码很简短,但是很奇妙,从中我体会到了链表的美妙之处。


1 0