在O(1)时间删除链表结点
来源:互联网 发布:java字符串转数字 编辑:程序博客网 时间:2024/06/04 18:15
题目:题目:给定链表的头指针和一个结点指针,在O(1)时间删除该结点。
思路:通常情况下,如果我们要删除单链表的一个节点,我们需要遍历链表找到这个节点的前一个节点,然后执行删除操作,时间复杂度为O(n).
我们试着换一种思路,事实上,我们可以从给定的结点得到它的下一个结点。这个时候我们实际删除的是它的下一个结点,由于我们已经得到实际删除的结点的前面一个结点,因此完全是可以实现的。当然,在删除之前,我们需要需要把给定的结点的下一个结点的数据拷贝到给定的结点中。此时,时间复杂度为O(1)。
struct ListNode { int value; ListNode *next;};void DeleteNode(ListNode* pListHead, ListNode* pToBeDeleted){ if(pListHead == NULL || pToBeDeleted == NULL) return; if(pToBeDeleted->next != NULL){ ListNode *pnext = pToBeDeleted->next; pToBeDeleted->value = pnext->value; pToBeDeleted->next= pnext->next; delete pnext; pnext = NULL; } else{ ListNode *pnode = pListHead; while(pnode->next != pToBeDeleted){ pnode = pnode->next; } pnode->next = NULL; delete pToBeDeleted; pToBeDeleted = NULL; }}
上面的代码基于两个假设:(1)给定的结点的确在链表中;(2)给定的要删除的结点不是链表的头结点。
0 0
- 在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)时间删除指定链表结点
- 在o(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点[数据结构]
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- ubuntu apache2配置详解(含虚拟主机配置方法)
- 常用Git命令汇总
- linux ssh-keygen
- 正则表达式简明参考
- 关于vi不正常退出产生的swp文件
- 在O(1)时间删除链表结点
- GIT分支管理是一门艺术
- Coding.net代码托管空间申请与使用-安装并运行WordPress博客
- CDN云主机与传统虚拟主机功能对比
- CDN云主机与传统虚拟主机功能对比
- 域名解析 URL转发
- 域名解析 URL转发
- 2014年十大优秀免费空间排行-稳定,速度,可靠和专业的免费主机空间
- git commit -am 合并操作