c++之連結串列篇1:單向連結串列的建立,列印,刪除,插入,銷燬等基本操作
阿新 • • 發佈:2019-01-10
在牛客網上刷題的過程遇到很多連結串列的問題,所以自己又結合著傳智播客上的視訊把連結串列整理了一下。
#include <iostream> using namespace std; //連結串列的的結點 struct ListNode { int val; struct ListNode *next; ListNode(int x) : val(x), next(NULL) { } }; //建立一個單向連結串列 ListNode* list_Create() { ListNode* pHead,*pCurrent,*pNew; int data; // 不斷輸入的資料 pHead = new ListNode(0); pCurrent = pHead; cin>>data; while(data != -1) { pNew = new ListNode(data); //1.建立新節點 pCurrent->next = pNew ; //2.插入新節點 pCurrent = pNew ; //3.讓新節點變成當前節點 cin>>data; } return pHead->next; //因為上面程式碼中的標頭檔案不是輸入資料,只是為了方便操作 } //列印單向連結串列 void list_Print(ListNode* pHead) { ListNode* tem ; if(pHead == NULL) return ; tem = pHead ; //養成好習慣:對傳入的資料用另外一個臨時變數接住 while(tem) { cout<<tem->val<<" "; tem = tem->next; } cout<<endl; } //插入單向連結串列 ListNode *list_Insert(ListNode* pHead,int x,int y)//在連結串列中值為x的結點後面插入y值的新節點 { if(pHead == NULL) return NULL; ListNode *pCurrent,*pNew; pCurrent = pHead ; pNew = new ListNode(y); while(pCurrent) { if(pCurrent->val == x) break; pCurrent = pCurrent->next; } pNew->next = pCurrent->next ;//在單向連結串列中,一定要注意當前節點的位置存放在前面結點的next域中 pCurrent->next = pNew ; //所以賦值的過程中是從後面的結點向前面的結點賦值的,而且指標指向誰,就賦給誰 return pHead ; } //刪除單向連結串列中的值為data的結點 ListNode* listDelete(ListNode* pHead,int data) { if(pHead == NULL) return NULL; ListNode* pPre,*pCurrent ; pPre = pHead ; pCurrent = pPre->next ; //pNew = new ListNode(data); while(pCurrent) { if(pCurrent->val == data ) break; pPre = pCurrent; pCurrent = pCurrent->next; } if(pCurrent == NULL) cout<<"未能找到值為:"<<data<<"的結點"<<endl; else { pPre->next = pCurrent->next ; delete pCurrent; } return pHead; } //單向連結串列的銷燬 int listDestory(ListNode* pHead) { if(pHead == NULL) return 0; ListNode *tem = NULL; while(pHead) { tem = pHead->next; delete pHead; pHead = tem; } return 0; } int main() { //新建連結串列測試 ListNode* node = list_Create(); //列印連結串列測試 list_Print(node); //插入連結串列測試 //ListNode* node5 = list_Insert(node ,10,999); //list_Print(node5); //刪除連結串列測試 //ListNode* node6 = listDelete(node,20); //list_Print(node6); //銷燬連結串列測試 int node7 = listDestory(node); return 0; }