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 }