【链表】链表基本操作

  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 }

原文地址:https://www.cnblogs.com/Lee-geeker/p/3294243.html