在O(1)时间删除链表结点
来源:互联网 发布:C 先序遍历的递归算法 编辑:程序博客网 时间:2024/06/06 10:55
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点.链表结点与函数定义如下:
struct ListNode{ int m_nValue; ListNode* m_pNext;};
code:
//把待删结点后面一个结点的值赋给待删结点,然后把待删结点next指针指向下下个结点,然后删除下个结点, 达到和删除待删结点一样的效果.void DeleteNode(ListNode** pListHead, ListNode* pToBeDeleted){ if (!pListHead || !pToBeDeleted) return; //链表仅有一个结点就是待删结点 if (*pListHead == pToBeDeleted && pToBeDeleted->m_pNext == NULL) { delete pToBeDeleted; pToBeDeleted = NULL; *pListHead = NULL; } //链表不止一个结点并且要删除的结点是头节点 else if (*pListHead == pToBeDeleted) { *pListHead = (*pListHead)->m_pNext; delete pToBeDeleted; pToBeDeleted = NULL; } //要删除的结点是最后一个结点 else if (pToBeDeleted->m_pNext == NULL) { ListNode* pTmp = *pListHead; while (pTmp->m_pNext != pToBeDeleted) { pTmp = pTmp->m_pNext; } pTmp->m_pNext = NULL; delete pToBeDeleted; pToBeDeleted = NULL; pTmp = NULL; } //待删除结点为正常结点 else { ListNode* pNext = pToBeDeleted->m_pNext; pToBeDeleted->m_nValue = pNext->m_nValue; pToBeDeleted->m_pNext = pNext->m_pNext; delete pNext; pNext = NULL; }}
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)时间删除链表结点
- 【读书笔记】iOS-截屏功能的实现。
- linux scp permission denied
- Problem K: 二进制表示中1的个数
- Could not calculate build plan: Plugin org.apache.maven.plugins:maven-resources-plugin:2.5 or one of
- drozer源码学习:app
- 在O(1)时间删除链表结点
- 内部排序(2)——冒泡排序
- wordpress 使用误区
- 读《编程之美》励志篇
- 不撞南墙不回头——树形动态规划(树规)
- hdu 2222 ac自动机模板
- 文章标题
- POJ 2006:Litmus Test 化学公式
- MySQL 打开federated存储引擎