o(1)时间删除链表指定结点
来源:互联网 发布:好听的网络红歪歌 编辑:程序博客网 时间:2024/04/30 12:58
一、常规删除方法 o(n)
算法:
1、不需改变链表结构
2、从头开始遍历结点,找到待删除结点的前一个结点。
二、O(1)
算法:
1、改变链表结构,并且不能是尾节点。给定要删除节点的地址。
2、不一定非得要找到被删除结点的前一个结点,可以很方便的找到待删除结点的下一个结点,将下一节点内容复制到待删除结点,删除下一节点即可。
3、如果是根据内容删除结点,则不能使用。
struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { }};void DeleteNode(ListNode* head,ListNode* NodeToDelete){ if(head == NULL ||NodeToDelete == NULL) return; //删除结点不是尾节点 if(NodeToDelete->next!=NULL){ ListNode* pNext = NodeToDelete->next; NodeToDelete->val = pNext->val; NodeToDelete->next = pNext->next; delete pNext; pNext = NULL; } //删除结点是尾节点且也是头结点 else if(head == NodeToDelete) { delete NodeToDelete; head = NULL; NodeToDelete = NULL; } //是尾节点不是头结点 else{ ListNode *p = head; while(head->next != NodeToDelete) p = p->next; p->next = NULL; delete NodeToDelete; NodeToDelete = NULL; }}
两种方法都需要注意:如果删除的是尾节点,需要指向NULL
0 0
- 在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)时间删除链表结点
- 033-在O(1)时间删除链表结点
- 在O(1)平均时间删除链表结点 [# 13]
- 在O(1)时间删除链表结点
- 在O(1)平均时间删除链表结点
- 在O(1)时间删除链表结点--总结
- SwipeRefreshLayout+NestedScrollView时内容的高度计算不对
- Android编码规范
- npm 设置代理服务器
- c++ <>与“”
- Java获取本机的mac地址
- o(1)时间删除链表指定结点
- c语言编程文件和函数说明模板
- 二维码,反馈,回顶部代码
- android 基本类型的引用如果是以大写开头的就是引用一个类
- 牛顿力学大厦
- Android中EventBus3.0 源码解析
- 注解 反射 概念
- 剑指offer-4-面试19:二叉树的镜像
- 2.2 获取表单元素数组,存入对象,并遍历输出 p55