#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 ;
}

最新文章

  1. .Net中的并行编程-6.常用优化策略
  2. 您的服务器没有安装这个PHP扩展:OpenSSL(其他平台API同步需要)
  3. [PCL]keypoint
  4. (三)uboot源码分析
  5. 【hdu3579-Hello Kiki】拓展欧几里得-同余方程组
  6. Jersey(1.19.1) - Hello World, Get started with Jersey using the embedded Grizzly server
  7. Flume学习——Flume中事务的定义
  8. 12天学好C语言——记录我的C语言学习之路(Day 11)
  9. 快速创建php server
  10. (转)Oracle Data Guard配置
  11. python2.7_1.14_编写一个简单的回显客户端/服务器应用
  12. Ruby学习: 类变量和类方法
  13. 动态类(Dynamic)应用
  14. java并发包下的并发工具类
  15. 2019.03.09 codeforces833B. The Bakery(线段树优化dp)
  16. SQL Server 2017 安装详解
  17. PAT 1042 字符统计(20)(思路)
  18. mac 安装配置java环境变量
  19. 解决MYSQL ERROR 1045 (28000)问题
  20. 空格在Html中的表示方法(&nbsp含义)

热门文章

  1. 没有Reduce的MapReduce(一)
  2. javascript总结23:javascript 数据类型与变量
  3. lshw查看系统硬件信息
  4. ios7 - Custom UItabbar has a gap in the bottom
  5. Statement 接口的应用(存在sql语句的注入风险)
  6. C/C++ Pthread线程
  7. GC分析中提到的根对象是什么
  8. sql查询语句的拼接小技巧(高手勿喷)
  9. Linq基础操作之Select,Where,OrderBy,ThenBy源码分析
  10. IIS7 配置ssl证书 多域名绑定443端口