在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)
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)
相关文章推荐
- [算法浅析] 如何在O(1)的时间里删除单链表的结点
- 【数据结构】单链表—在O(1)时间删除链表结点
- 在O(1)时间内删除单链表结点
- 在O(1)时间内删除单链表结点
- 剑指offer算法题之单链表的删除结点操作--面试题13:在O(1)时间删除链表结点
- 在 O(1) 的时间内删除单链表的结点
- mtk笔试题-----快速删除单链表中一个结点。时间复杂度为o(1)
- 面试题13:在O(1)时间删除单链表结点
- 在O(1)时间删除单链表结点
- 设一个没有头结点指针的单链表。一个指针指向此单链表中间的一个结点(不是第一个,也不是最后一个结点),将该结点从单链表中删除,要求时间复杂度O(1)。
- 如何在O(1)的时间里删除单链表的结点
- 在O(1)时间内删除单链表结点
- 时间复杂度分别为 O(n)和 O(1)的删除单链表结点的方法
- [算法浅析] 如何在O(1)的时间里删除单链表的结点
- 4,常数时间内删除单链表中某结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点--总结
- 在O(1)时间内删除链表结点
- O(1)时间删除链表结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点