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); }
相关文章推荐
- c语言的知识与能力自评
- C语言参数传递
- C++服务器(六):socket 异步模型与select 的实现
- C++实验三--个人所得税计算器
- C++实现——卡特兰数列及其应用
- (C++) Include 文件
- 一个关于时间的静态变量的应用
- 一个关于时间的静态变量的应用
- 一个关于时间的静态变量的应用
- 一个关于时间的静态变量的应用
- 一个关于时间的静态变量的应用
- C语言问卷调查
- c#调用C++的DLL找不到入口点以及衍生的相关问题
- C语言问卷调查
- C++虚函数与虚函数表
- C语言的问卷调查
- 吐槽《C++ GUI Qt4 编程》这本书
- C语言问卷调查
- 61. Rotate List
- C语言的知识与能力予以自评