剑指offer13:在O(1)时间删除链表结点
来源:互联网 发布:淘宝订单交易风险违规 编辑:程序博客网 时间:2024/06/05 05:16
题目:在给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间内删除该节点。链表的结点定义如下:
struct ListNode {
int val;
ListNode *next;
};
要分析几种情况:
1.空链表
2.只有一个结点
3.删除的结点是尾结点
void DeleteNode(ListNode *pNode,ListNode *pDeleted) { if(!pNode || !pDeleted) return; //要删除的节点不是尾结点 if(pDeleted->next != NULL) { ListNode *pNext = pDeleted->next; pDeleted->value = pNext->value; pDeleted->next = pNext ->next; delete pNext; pNext = NULL; } //链表只有一个节点,删除头结点(也是尾节点) else if(pNode == pDeleted) { free(pDeleted); pDeleted = NULL; pListNode= NULL; } //链表中有多个节点,删除尾结点 else { ListNode *p = pNode; while(p ->next != pDeleted) { p = p->next; } p->next =NULL; delete pDeleted; pDeletd = NULL; } }}
总结:对于n-1个非尾结点而言,我们可以在O(1)时把下一个节点的内存复制覆盖要删除的结点,并删除下一个节点;对于尾结点而言,由于仍要顺序查找到尾结点的前面一个节点,时间复杂度是O(n)。因此总的平均时间复杂度是[(n-1)*O(1) +O(n)]/n 结果还是O(1)
0 0
- 剑指offer13:在O(1)时间删除链表结点
- 剑指offer13:在O(1)时间删除链表结点
- 【面试题】剑指offer13--在O(1)时间删除链表结点
- 剑指offer13-在O(1)时间删除链表节点
- 剑指offer13:O(1)时间删除链表节点
- 在O(1)时间删除链表结点--总结
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 033-在O(1)时间删除链表结点
- 在O(1)平均时间删除链表结点 [# 13]
- 在O(1)时间删除链表结点
- 在O(1)平均时间删除链表结点
- 在O(1)时间删除链表结点--总结
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除指定链表结点
- [译]JavaScript:如何判断值的类型
- Matlab编程 入门(一)
- gitlab配置修改
- 初学安卓——权威指南挑第二版挑战练习
- 【开发工具】dll程序集合并工具之ILMerge
- 剑指offer13:在O(1)时间删除链表结点
- Numpy学习笔记之线性代数
- 文章标题 Til the Cows Come Home
- Til the Cows Come Home(POJ 2387)
- 线程同步的方法有哪些(面试题)
- java-泛型程序设计(一)
- ISE与MATLAB的联合使用
- 画图板的课后感想
- 机器学习定义