剑指offer——面试题18:删除链表的节点
2024-09-01 08:19:15
#include"List.h" void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted)
{
if(*pHead==nullptr || pToBeDeleted==nullptr)
return;
if(pToBeDeleted->m_pNext!=nullptr)
{
ListNode* pNext=pToBeDeleted->m_pNext;
pToBeDeleted->m_pNext=pNext->m_pNext;
pToBeDeleted->m_Value=pNext->m_Value;
delete pNext;
pNext=nullptr;
}
else if(pToBeDeleted==*pHead)
{
delete pToBeDeleted;
pToBeDeleted=nullptr;
*pHead=nullptr;
}
else
{
ListNode* pNode=*pHead;
while(pNode->m_pNext!=pToBeDeleted)
pNode=pNode->m_pNext;
pNode->m_pNext=nullptr;
delete pToBeDeleted;
pToBeDeleted=nullptr;
}
}
void Test(ListNode* pListHead, ListNode* pNode)
{
printf("The original list is: \n");
PrintList(pListHead); printf("The node to be deleted is: \n");
PrintListNode(pNode); DeleteNode(&pListHead, pNode); printf("The result list is: \n");
PrintList(pListHead);
} // 链表中有多个结点,删除中间的结点
void Test1()
{
ListNode* pNode1 = CreateListNode();
ListNode* pNode2 = CreateListNode();
ListNode* pNode3 = CreateListNode();
ListNode* pNode4 = CreateListNode();
ListNode* pNode5 = CreateListNode(); ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5); Test(pNode1, pNode3); DestroyList(pNode1);
} // 链表中有多个结点,删除尾结点
void Test2()
{
ListNode* pNode1 = CreateListNode();
ListNode* pNode2 = CreateListNode();
ListNode* pNode3 = CreateListNode();
ListNode* pNode4 = CreateListNode();
ListNode* pNode5 = CreateListNode(); ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5); Test(pNode1, pNode5); DestroyList(pNode1);
} // 链表中有多个结点,删除头结点
void Test3()
{
ListNode* pNode1 = CreateListNode();
ListNode* pNode2 = CreateListNode();
ListNode* pNode3 = CreateListNode();
ListNode* pNode4 = CreateListNode();
ListNode* pNode5 = CreateListNode(); ConnectListNodes(pNode1, pNode2);
ConnectListNodes(pNode2, pNode3);
ConnectListNodes(pNode3, pNode4);
ConnectListNodes(pNode4, pNode5); Test(pNode1, pNode1); DestroyList(pNode1);
} // 链表中只有一个结点,删除头结点
void Test4()
{
ListNode* pNode1 = CreateListNode(); Test(pNode1, pNode1);
} // 链表为空
void Test5()
{
Test(nullptr, nullptr);
} int main(int argc, char* argv[])
{
Test1();
Test2();
Test3();
Test4();
Test5(); return ;
}
最新文章
- .Net中的并行编程-6.常用优化策略
- 您的服务器没有安装这个PHP扩展:OpenSSL(其他平台API同步需要)
- [PCL]keypoint
- (三)uboot源码分析
- 【hdu3579-Hello Kiki】拓展欧几里得-同余方程组
- Jersey(1.19.1) - Hello World, Get started with Jersey using the embedded Grizzly server
- Flume学习——Flume中事务的定义
- 12天学好C语言——记录我的C语言学习之路(Day 11)
- 快速创建php server
- (转)Oracle Data Guard配置
- python2.7_1.14_编写一个简单的回显客户端/服务器应用
- Ruby学习: 类变量和类方法
- 动态类(Dynamic)应用
- java并发包下的并发工具类
- 2019.03.09 codeforces833B. The Bakery(线段树优化dp)
- SQL Server 2017 安装详解
- PAT 1042 字符统计(20)(思路)
- mac 安装配置java环境变量
- 解决MYSQL ERROR 1045 (28000)问题
- 空格在Html中的表示方法(&;nbsp含义)