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

C++单向链表之删除节点

2016-04-07 20:18 507 查看
笔者的时间复杂度为O(1)

下面是实现的函数:

void DeleteNode(ListNode** pHead, ListNode* pToBeDeleted){//删除链接节点算法 时间复杂度为O(1);
if (!pHead || !pToBeDeleted)
{
return;
}
if (pToBeDeleted->m_pNext != NULL)
{
ListNode* pNext = pToBeDeleted->m_pNext;
pToBeDeleted->m_nValue = pNext->m_nValue;
pToBeDeleted->m_pNext = pNext->m_pNext;
delete pNext;
pNext = NULL;
}
else if (*pHead ==pToBeDeleted)
{
delete pToBeDeleted;
pToBeDeleted = NULL;
*pHead = NULL;
}
else
{
ListNode* pNode = *pHead;
while (pNode->m_pNext != pToBeDeleted)
{
pNode = pNode->m_pNext;
}
pNode->m_pNext = NULL;
delete pToBeDeleted;
pToBeDeleted = NULL;
}
}
void Test(ListNode* pListHead, ListNode* pNode){
printf("the original list is:\n");
PrintList(pListHead);
printf("The node to be deleted is:\n");
PrintList(pNode);
DeleteNode(&pListHead, pNode);
printf("the result list is:\n");
PrintList(pListHead);
}

void Test1(){
ListNode* pNode1 = CreateListNode(1);
ListNode* pNode2 = CreateListNode(2);
ListNode* pNode3 = CreateListNode(3);
ListNode* pNode4 = CreateListNode(4);
ListNode* pNode5 = CreateListNode(5);
CoonnectListNode(pNode1, pNode2);
CoonnectListNode(pNode2, pNode3);
CoonnectListNode(pNode3, pNode4);
CoonnectListNode(pNode4, pNode5);
Test(pNode1, pNode5);
DestroyList(pNode1);

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