📜  门| GATE-IT-2004 |问题13

📅  最后修改于: 2021-06-29 20:14:31             🧑  作者: Mango

令P为单链表。令Q为指向列表中的中间节点x的指针。从列表中删除节点x的最著名算法的最坏情况下的时间复杂度是多少?
(A) O(n)
(B) O(log2 n)
(C) O(登录)
(D) O(1)答案: (D)
说明:一个简单的解决方案是遍历链接列表,直到找到要删除的节点为止。但是此解决方案需要指向头节点的指针,这与问题陈述相矛盾。

快速解决方案是将数据从下一个节点复制到要删除的节点,然后删除下一个节点。像下面这样。

// Find next node using next pointer
    struct node *temp  = node_ptr->next;

    // Copy data of next node to this node
    node_ptr->data  = temp->data;

    // Unlink next node
    node_ptr->next  = temp->next;

    // Delete next node
    free(temp);

该方法的时间复杂度为O(1)

请参考此实现。

请注意,当要删除的节点是最后一个节点时,此方法不起作用。由于问题是中间节点,因此我们可以使用这种方法。这个问题的测验