yh1,單鏈表的實現和新增刪除
阿新 • • 發佈:2022-03-28
/** * code by wubaoshan 2022/03/27 */ #include <iostream> #include<stdlib.h> using namespace std; /************************************************************************************************** Project 1 定義一個單向連結串列node, 每個節點值為int. 定義函式void create_linklist(…, int n)來生成連結串列,連結串列長度由引數n傳入,生成的連結串列要作為引數返回,而不是當初函式返回值返回,連結串列節點值為1,2,3...n; 定義函式reverse_linklist(...), 對引數傳入的連結串列進行逆轉; 定義函式insert_node(node *pHead, int Index, int Value ), 在指定連結串列位置Index插入指定Value; 定義函式delete_node(node *pHead, int Index),刪除連結串列位置Index所在的節點; 定義函式delete_linklist(), 刪除整個連結串列; 定義函式print_linklist(), 列印整個連結串列。 */ struct node { int v; node* n; }; /* 連結串列長度由引數n傳入,生成的連結串列要作為引數返回,而不是當初函式返回值返回, 連結串列節點值為1,2,3...n */ void create_linklist(node **pHead, int n) { (*pHead) = (node*)malloc(sizeof(node)); if(NULL == pHead) { cout << "malloc failed " << endl; } (*pHead)->v = 1; //初始位置 (*pHead)->n = NULL; node *temp; for(int i = n; i > 1; i--) { temp = (node *)malloc(sizeof(node)); if(NULL == temp) { cout << "malloc failed " << endl; } temp->v = i; temp->n = (*pHead)->n; (*pHead)->n = temp; } } //對引數傳入的連結串列進行逆轉 void reverse_linklist(node **pHead) { } //在指定連結串列位置Index插入指定Value // Index 為 1 ~ n 代表 1 ~ n 個節點 // Index = 0 即為頭新增 void insert_node(node **pHead, int Index, int Value) { if( NULL == *pHead ) { cout << "null ptr " << endl; } node *testInset; node *temp; temp = *pHead; for(int i = 1; i < Index; i++) { temp = temp->n; } testInset = (node *)malloc(sizeof(node)); if(NULL == testInset) { cout << " insert failed " << endl; } testInset->v = Value; testInset->n = temp->n; temp->n = testInset; } //刪除連結串列位置Index所在的節點 void delete_node(node **pHead, int Index) { node *delNode; node *delTemp; delNode = *pHead; for(int i = 1; i < Index; i++) { delNode = delNode->n; } delTemp = delNode->n; delNode->n = delNode->n->n; free(delTemp); } //刪除整個連結串列 void delete_linklist(node **pHead) { node *delList; node *delTemp; delList = (*pHead)->n; while( delList != NULL) { delTemp = delList->n; free(delList); delList = delTemp; } delList->n = NULL; cout << "delete list sucess " << endl; } //列印整個列表 void print_linklist(node **pHead) { if(NULL == *pHead) { cout << "printf empty" << endl; } node *print; print = (*pHead)->n; cout << (*pHead)->v << endl; for(print; print != NULL; print = print->n) { cout << print->v << endl; } } int main() { node *pHead = nullptr; int n = 10; cout << "==========Project1=================" << endl; /**初始化建立**/ cout << "init node " << endl; create_linklist(&pHead, n); print_linklist(&pHead); /**插入節點**/ cout << "insert node " << endl; insert_node(&pHead,8,15); print_linklist(&pHead); /**刪除節點**/ cout << "delte node " << endl; delete_node(&pHead,7); print_linklist(&pHead); /**連結串列逆轉**/ //reverse_linklist(&pHead); //print_linklist(&pHead); /**刪除連結串列**/ cout << "delte list " << endl; delete_linklist(&pHead); print_linklist(&pHead); cout << "==========Project1=================" << endl; cout << endl; return 0; }