在O(1)时间内删除链表指定结点
2013-08-03 22:14
423 查看
链表节点结构如下,
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
求出在O(1)时间内删除链表给定结点的算法函数,该函数的声明如下:
void DeleteNode(ListNode *pListHead, ListNode *pToBeDeleted);
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
//在O(1)时间内删除链表结点
void DeleteNode(ListNode *pListHead, ListNode *pToBeDeleted)
{
if (NULL != pToBeDeleted->m_pNext) //如果删除的节点不是尾节点
{
ListNode *pRealDeleted = pToBeDeleted->m_pNext;
pToBeDeleted->m_nKey = pRealDeleted->m_nKey;
//将待删除的节点的下一个节点的内容复制到要删除的节点
pToBeDeleted->m_pNext = pRealDeleted->m_pNext;
//将要删除的节点的指针指向下一个节点的下一个节点
delete pRealDeleted;
//删除要删除的节点的下一个节点,该节点的内容被保存待要删除的节点
}
else //如果删除的节点是尾节点
{
ListNode *pNode = pListHead;
while (NULL != pNode) //非空链表
{
if (pNode->m_pNext == pToBeDeleted) //找到了尾节点的前一个节点
{
pNode->m_pNext = NULL;
delete pToBeDeleted;
break;
}
pNode = pNode->m_pNext; //正向遍历链表
}
}
}
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
求出在O(1)时间内删除链表给定结点的算法函数,该函数的声明如下:
void DeleteNode(ListNode *pListHead, ListNode *pToBeDeleted);
struct ListNode
{
int m_nKey;
ListNode* m_pNext;
};
//在O(1)时间内删除链表结点
void DeleteNode(ListNode *pListHead, ListNode *pToBeDeleted)
{
if (NULL != pToBeDeleted->m_pNext) //如果删除的节点不是尾节点
{
ListNode *pRealDeleted = pToBeDeleted->m_pNext;
pToBeDeleted->m_nKey = pRealDeleted->m_nKey;
//将待删除的节点的下一个节点的内容复制到要删除的节点
pToBeDeleted->m_pNext = pRealDeleted->m_pNext;
//将要删除的节点的指针指向下一个节点的下一个节点
delete pRealDeleted;
//删除要删除的节点的下一个节点,该节点的内容被保存待要删除的节点
}
else //如果删除的节点是尾节点
{
ListNode *pNode = pListHead;
while (NULL != pNode) //非空链表
{
if (pNode->m_pNext == pToBeDeleted) //找到了尾节点的前一个节点
{
pNode->m_pNext = NULL;
delete pToBeDeleted;
break;
}
pNode = pNode->m_pNext; //正向遍历链表
}
}
}
相关文章推荐
- 在O(1)时间删除指定链表结点
- 在O(1)时间删除链表中某指定结点
- o(1)时间删除链表指定结点
- O(1)时间内删除指定链表结点
- [原]在O(1)时间内删除链表指定结点
- 算法-O(1)时间删除链表的指定结点
- 在O(1)时间删除指定链表结点
- 数据结构与算法分析笔记与总结(java实现)--链表14:删除链表中所有指定值结点问题
- 剑指offer-13:在O(1)时间删除链表结点
- 剑指Offer_面试题13_在O(1)时间删除链表结点
- 在O(1)时间删除链表结点
- 面试题15:在O(1)时间删除链表结点
- 给定链表的头指针和一个结点指针,在O(1)时间删除该结点。
- 数据结构——算法之(027)( 在O(1)时间内删除链表结点)
- 在O(1)时间删除链表结点
- 面试题13-在o(1)时间删除链表结点
- 面试题13:在O(1)时间删除链表结点
- 每天一道算法题2 删除链表结点(时间复杂度为O(1)))
- 剑指offer——面试题13:在O(1)时间删除链表结点
- 在O(1)时间删除链表结点