1 #include<iostream>
2
3
4 using namespace std;
5
6 typedef struct _NODE_
7 {
8 int a;
9 _NODE_* pNext;
10
11 }Node,*pNode;
12
13
14 class CList
15 {
16
17 private:
18 pNode m_pHead;
19 pNode m_pTail;
20 int iNodeCount;
21
22 public:
23 CList()
24 {
25 m_pHead = m_pTail = NULL;
26 iNodeCount = 0;
27 }
28 ~CList()
29 {
30
31 }
32 void InitList();
33 pNode CreateNode(int a);
34 bool LinkNode(pNode pNodeTemp);
35 bool InsertNodeByIndex(pNode pNodeTemp,int iIndex);
36 bool DeleteNode(int iIndex);
37 void DestroyList();
38
39 void TravelList()
40 {
41 if(m_pHead == NULL && iNodeCount == 0)
42 {
43 cout<<"List is Empty."<<endl;
44 return ;
45 }
46 pNode pNodeTemp = m_pHead;
47
48 for(int i = 0;i<iNodeCount;i++)
49 {
50 cout<<pNodeTemp->a<<ends;
51 pNodeTemp = pNodeTemp->pNext;
52 }
53 cout<<endl;
54 }
55
56
57 };
58
59
60 void CList::InitList()
61 {
62 if(m_pHead != NULL)
63 {
64 DestroyList();
65 }
66
67 m_pHead = m_pTail = NULL;
68
69 iNodeCount = 0;
70 }
71 pNode CList::CreateNode(int a)
72 {
73 pNode pNodeTemp = new Node;
74
75 if(pNodeTemp != NULL)
76 {
77 pNodeTemp->a = a;
78 pNodeTemp->pNext = NULL;
79
80 return pNodeTemp;
81 }
82 return false;
83 }
84
85 bool CList::LinkNode(pNode pNodeTemp)
86 {
87 if(m_pHead == NULL)
88 {
89 m_pHead = m_pTail = pNodeTemp;
90 }
91 else
92 {
93 m_pTail->pNext = pNodeTemp;
94 m_pTail = pNodeTemp;
95 }
96
97 iNodeCount++;
98
99 return true;
100 }
101
102 bool CList::InsertNodeByIndex(pNode pNodeTemp,int iIndex)
103 {
104 if(iIndex >=1 && iIndex <= iNodeCount)
105 {
106 pNode pNodeInsert = m_pHead;
107
108 for(int i=1;i<iIndex-1;i++)
109 {
110 pNodeInsert = pNodeInsert->pNext;
111 }
112
113 pNodeTemp->pNext = pNodeInsert->pNext;
114 pNodeInsert->pNext = pNodeTemp;
115
116 iNodeCount++;
117 return true;
118 }
119
120 return false;
121 }
122 bool CList::DeleteNode(int iIndex)
123 {
124 pNode pNodeDel = m_pHead;
125 for(int i=1;i<iIndex-1;i++)
126 {
127 pNodeDel = pNodeDel->pNext;
128 }
129
130 pNodeDel->pNext = pNodeDel->pNext->pNext;
131
132 iNodeCount--;
133 if(iNodeCount == 0)
134 {
135 m_pHead = m_pTail = NULL;
136 }
137
138 return true;
139 }
140
141 void CList::DestroyList()
142 {
143 pNode pNodeDel = m_pHead;
144
145 while(pNodeDel != NULL)
146 {
147 m_pHead = m_pHead->pNext;
148
149 delete pNodeDel;
150
151 pNodeDel = m_pHead;
152
153 iNodeCount--;
154 }
155
156 m_pHead = m_pTail = NULL;
157
158 iNodeCount = 0;
159 }
160
161
162
163
164
165
166 int main()
167 {
168
169 CList CListObj;
170
171 pNode pNodeTemp = {0};
172
173 int i = 0;
174 int a = 0;
175 int iIndex = 0;
176 cout<<"Test."<<endl;
177 for(i=0;i<5;i++)
178 {
179 cout<<"Please Input Data:"<<endl;
180 cin>>a;
181 pNode pNodeTemp = CListObj.CreateNode(a);
182 CListObj.LinkNode(pNodeTemp);
183 }
184 CListObj.TravelList();
185
186 cout<<"Input a Index to Delete."<<endl;
187 cin>>iIndex;
188
189 CListObj.DeleteNode(iIndex);
190
191 CListObj.TravelList();
192
193 cout<<"Input Data and Index to Inesert."<<endl;
194 cout<<"Data:"<<endl;
195 cin>>a;
196 cout<<"Index:"<<endl;
197 cin>>iIndex;
198 pNodeTemp = CListObj.CreateNode(a);
199
200 CListObj.InsertNodeByIndex(pNodeTemp,iIndex);
201
202
203 CListObj.TravelList();
204
205
206 cout<<endl;
207
208 cout<<"DestroyList."<<endl;
209
210 CListObj.DestroyList();
211
212 cout<<endl;
213 CListObj.TravelList();
214 return 0;
215 }