在O(1)时间删除链表结点
2015-08-12 18:34
330 查看
给定单向链表的头指针和一个结点指针,定义一个函数在O(1)时间删除该结点.链表结点与函数定义如下:
code:
[code]struct ListNode { int m_nValue; ListNode* m_pNext; };
code:
[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; } }
相关文章推荐
- wordpress 使用误区
- 自关联去掉组内重复数据
- IE 兼容模式下不支持DIV CSS样式display:inline-block,解决
- not in\in与not exists\exists—SQLCookbook
- Problem K: 二进制表示中1的个数
- OData - ASP.NET Web API 2 中Odata路由约定
- 读书笔记-APUE第三版-(10)信号
- Web安全测试之跨站请求伪造(CSRF)
- 【读书笔记】iOS-截屏功能的实现。
- 深入理解Java异常
- hdu 1228 A + B 详细题解 字符串/哈希
- nginx的数据结构集合(随时更新)
- MyEclipse UTF-8环境设置
- 黑马学习笔记_Java 反射技术
- android_线
- 【读书笔记】iOS-截屏功能的实现。
- Spring事务配置的五种方式
- android中获取屏幕的信息
- java虚拟机
- Problem E: 二维数组中的查找