算法面试题(3) - O(1)删除链表节点

题目:

  删除链表内地某节点, 要求时间复杂度为O(1).

解答:

  void delete_node(Node *head, Node *node) {

    Node *next = node->next;

    if(next==NULL) { /* if the node is the tail of the list */

      Node *curr_node = head;

      while(curr_node->next!=node) { curr_node= curr_node->next; }

      curr_node = NULL;

      delete node;

      return;

    }

    memmov(node, next, sizeof(Node));

    delete next;

  }

  其实这个办法删除的只是node的内容, 而真正删除的是node->next节点.

 

posted @ 2008-12-01 16:21  破冰  阅读(651)  评论(0)    收藏  举报