您的位置:首页 > 其它

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

2017-01-12 20:18 267 查看
给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在O(1)时间内删除该结点。

int deleteNode(LNode **head, LNode **node) {
if (!head || !node) {
return 0;
} else if (head == node) {
if ((*head)->next) {
*head = (*head)->next;
}
DestroyNode(node);
node = NULL;
//node是头结点

return 1;
} else if (!(*node)->next) {
//node是尾结点情况
LNode *p = *head;
while (p->next != *node) {
p = p->next;
}
p->next = NULL;
DestroyNode(node);
return 1;
} else {
/*后一元素内容覆盖node内容,删除后一元素*/
LNode *p = *node;
LNode *next = p->next;
p->data = next->data;
p->next = next->next;

DestroyNode(next);
next = NULL;

return 1;
}
}
时间复杂度:(O(n)+O(1)*(n-1))/n=O(1)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息