ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

剑指offer——面试题18:删除链表的节点

2019-02-20 20:04:09  阅读:193  来源: 互联网

标签:面试题 ListNode CreateListNode offer pNode1 ConnectListNodes 链表 pNext pToBeDeleted


  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

 

标签:面试题,ListNode,CreateListNode,offer,pNode1,ConnectListNodes,链表,pNext,pToBeDeleted
来源: https://www.cnblogs.com/acm-jing/p/10408766.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有