O(1)时间删除链表结点
来源:互联网 发布:淘宝卖家订单管理系统 编辑:程序博客网 时间:2024/05/18 00:11
题目:
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点。链表结点定义为
typedef struct Node
{
int val_;
struct Node *pNext;
}Node;
void deleteNode(Node *pHead, Node *pNode);
且假设 该结点指针指向一定在链表中, 存在头结点(值存放结点个数)
思路:
如果挨个遍历,等pNode == pCur时删除结点, 时间复杂度一般为O(n)。所以不行
如果pNode结点不是尾结点,可将pNode的下一个结点的值val赋值给pNode的val,之后删除pNode便可以
如果pNode结点是尾结点,则按照常规方法遍历到该结点的前一个结点,将NULL赋值给该节点的前一个结点的pNext。
代码:
void DeleteNode(Node *pHead, Node *pNode)
{
Node *pNext = pNode->next;
if (pNext == NULL) //结点是尾结点
{
Node *pPre = pHead;
Node *pCur = pPre->next;
while (pCur != pNode)
{
pPre = pCur;
pCur = pCur->next;
}
pPre->next = pCur->next;
free(pCur);
pCur = NULL;
}else
{
pNode->val_ = pNext->val_;
pNode->next = pNext->next;
free(pNext);
pNext = NULL;
}
}
- 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)时间删除链表结点--总结
- 在O(1)时间删除链表结点
- 删除链表结点要求O(1)时间复杂度
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 树莓派B+实战之一 超声波测距传感器HC-SR04
- 网易笔试题:藏宝图
- 基础C语言之Typedef和struct的结合使用
- poj 2935 Basic Wall Maze
- 398. Random Pick Index &&382. Linked List Random Node 蓄水池原理
- O(1)时间删除链表结点
- S5PV210时钟详解
- css兼容性问题
- 环境变量配置(JDK,ADB)
- **UML** UML建模工具的理论介绍
- Python调用微软语音识别
- React-Native系列Android自定义原生UI组件
- Vim操作总结
- JavaScript Dom 编程艺术 笔记