您的位置:首页 > 其它

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

2017-03-25 23:03 127 查看
题目:给定一个单链表中的一个等待被删除的节点(非表头或表尾)。请在在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;

    }

感想:这个题很奇妙的一点就是将这个要被删除的节点变成了和它下一个节点一摸一样的节点,不连接的是它的下一个节点但并没有造成信息的丢失。这个代码很简短,但是很奇妙,从中我体会到了链表的美妙之处。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: