博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
剑指offer——面试题18:删除链表的节点
阅读量:6866 次
发布时间:2019-06-26

本文共 3093 字,大约阅读时间需要 10 分钟。

1 #include"List.h"  2   3 void DeleteNode(ListNode** pHead,ListNode* pToBeDeleted)  4 {  5     if(*pHead==nullptr || pToBeDeleted==nullptr)  6         return;  7     if(pToBeDeleted->m_pNext!=nullptr)  8     {  9         ListNode* pNext=pToBeDeleted->m_pNext; 10         pToBeDeleted->m_pNext=pNext->m_pNext; 11         pToBeDeleted->m_Value=pNext->m_Value; 12         delete pNext; 13         pNext=nullptr; 14     } 15     else if(pToBeDeleted==*pHead) 16     { 17         delete pToBeDeleted; 18         pToBeDeleted=nullptr; 19         *pHead=nullptr; 20     } 21     else 22     { 23         ListNode* pNode=*pHead; 24         while(pNode->m_pNext!=pToBeDeleted) 25             pNode=pNode->m_pNext; 26         pNode->m_pNext=nullptr; 27         delete pToBeDeleted; 28         pToBeDeleted=nullptr; 29     } 30 } 31 void Test(ListNode* pListHead, ListNode* pNode) 32 { 33     printf("The original list is: \n"); 34     PrintList(pListHead); 35  36     printf("The node to be deleted is: \n"); 37     PrintListNode(pNode); 38  39     DeleteNode(&pListHead, pNode); 40  41     printf("The result list is: \n"); 42     PrintList(pListHead); 43 } 44  45 // 链表中有多个结点,删除中间的结点 46 void Test1() 47 { 48     ListNode* pNode1 = CreateListNode(1); 49     ListNode* pNode2 = CreateListNode(2); 50     ListNode* pNode3 = CreateListNode(3); 51     ListNode* pNode4 = CreateListNode(4); 52     ListNode* pNode5 = CreateListNode(5); 53  54     ConnectListNodes(pNode1, pNode2); 55     ConnectListNodes(pNode2, pNode3); 56     ConnectListNodes(pNode3, pNode4); 57     ConnectListNodes(pNode4, pNode5); 58  59     Test(pNode1, pNode3); 60  61     DestroyList(pNode1); 62 } 63  64 // 链表中有多个结点,删除尾结点 65 void Test2() 66 { 67     ListNode* pNode1 = CreateListNode(1); 68     ListNode* pNode2 = CreateListNode(2); 69     ListNode* pNode3 = CreateListNode(3); 70     ListNode* pNode4 = CreateListNode(4); 71     ListNode* pNode5 = CreateListNode(5); 72  73     ConnectListNodes(pNode1, pNode2); 74     ConnectListNodes(pNode2, pNode3); 75     ConnectListNodes(pNode3, pNode4); 76     ConnectListNodes(pNode4, pNode5); 77  78     Test(pNode1, pNode5); 79  80     DestroyList(pNode1); 81 } 82  83 // 链表中有多个结点,删除头结点 84 void Test3() 85 { 86     ListNode* pNode1 = CreateListNode(1); 87     ListNode* pNode2 = CreateListNode(2); 88     ListNode* pNode3 = CreateListNode(3); 89     ListNode* pNode4 = CreateListNode(4); 90     ListNode* pNode5 = CreateListNode(5); 91  92     ConnectListNodes(pNode1, pNode2); 93     ConnectListNodes(pNode2, pNode3); 94     ConnectListNodes(pNode3, pNode4); 95     ConnectListNodes(pNode4, pNode5); 96  97     Test(pNode1, pNode1); 98  99     DestroyList(pNode1);100 }101 102 // 链表中只有一个结点,删除头结点103 void Test4()104 {105     ListNode* pNode1 = CreateListNode(1);106 107     Test(pNode1, pNode1);108 }109 110 // 链表为空111 void Test5()112 {113     Test(nullptr, nullptr);114 }115 116 int main(int argc, char* argv[])117 {118     Test1();119     Test2();120     Test3();121     Test4();122     Test5();123 124     return 0;125 }
View Code

 

转载于:https://www.cnblogs.com/acm-jing/p/10408766.html

你可能感兴趣的文章
过度加班? - 是该到了认真考虑的时候了。
查看>>
linux启动出问题
查看>>
linux查看哪些进程占用swap空间
查看>>
VS_断点无效
查看>>
关于“无敌删除命令”
查看>>
017 搭建eureka注册中心
查看>>
nis服务器搭建
查看>>
红帽企业存储管理之DRBD应用详解
查看>>
Linux下mail服务器架构之源码实现postfix邮件基本功能
查看>>
Bios加密
查看>>
Apache 服务+ AWStat分析系统的应用
查看>>
前端技术学习之选择器(六)
查看>>
使用 Docker 搭建 Tomcat 运行环境
查看>>
vim使用技巧
查看>>
牛反天望观测太阳系内目标的使用小记 (一)
查看>>
Create a RHEL6 PXE Installation Server
查看>>
【Android游戏开发二十二】(图文详解)游戏中灵活实现动画播放!
查看>>
桌面支持--Office2013没有Office Picture Manage怎么安装
查看>>
chmod修改文件权限失败
查看>>
数据结构与算法-->互为素数
查看>>