在O(1)时间删除链表结点

来源:互联网 发布:尔雅网络课 编辑:程序博客网 时间:2024/06/05 19:25

题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点 

思路是将需要删除节点的值变为他的下一结点,然后删除它的下一结点,这样就像是变相删除了该节点。

void delete_node(node *list,node *toBeDeletedNode){
    if(toBeDeletedNode->next){           //不为尾节点
        node *p=toBeDeletedNode->next;     //修改需要删除那个节点的值,再删除它的后一节点
        toBeDeletedNode->data=p->data;
        toBeDeletedNode->next=p->next;
        delete p;
    }else{                               //尾节点
        node *p=list;
        while(p->next!=toBeDeletedNode){ 
            p=p->next;
        }
        p->next=NULL;
        delete toBeDeletedNode;
    }
}
0 0
原创粉丝点击