给定单链表的一个结点的指针,同时该结点不是尾结点,此外没有指向其它任何结点的指针,请在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)