您的位置:首页 > 编程语言 > C语言/C++

在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; //正向遍历链表

}

}

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息