(1)結構體定義節點
用結構體存每個鏈表每個節點存的數據和指向的下一個節點的地址。
struct Node { int data; Node *next; };
(2)用結構體定義一個鏈表,存鏈表的頭指針和長度。
struct List { Node *head; int length; };
(3)新增一個節點(尾插法),節點存的數據是dt
void AddNode(List &list,int dt) { Node *pCurNode=new Node; //開辟一個Node類型數據的空間,將地址返回給pCurNode pCurNode->data=dt; pCurNode->next=NULL; if(list.head==NULL) //如果當前插入的是鏈表第一個節點 { list.head=pCurNode; list.length=1; }else //尾插法 { Node *pt=list.head; while(pt->next!=NULL)pt=pt->next; pt->next=pCurNode; list.length++; } }
(4)刪除存的數據是num的節點
void DeleteNode(List &list,int num) { Node *pCurNode=list.head; Node *preNode=NULL; while(pCurNode!=NULL&&pCurNode->data!=num) { preNode=pCurNode; pCurNode=pCurNode->next; } if(pCurNode==NULL) { cout<<"Can't find"<<num<<"in the list"<<endl; return; } if(pCurNode==list.head) list.head=list.head->next;//如果刪除的節點是第一個節點,改變鏈表頭指針 else preNode->next=pCurNode->next; list.length--; delete pCurNode; }
(5)找到存的數據是num的節點
Node *FindNode(const List &list,int num) { Node *pCurNode=list.head; while(pCurNode) { if(pCurNode->data==num) { cout<<"找到了"<<num<<".\n"; return pCurNode; } pCurNode=pCurNode->next; } cout<<"無法找到"<<num<<endl; return NULL; }
(6)輸出這個鏈表
void Output(const List &list) { cout<<"鏈表:"; Node *pCurNode=list.head; while(pCurNode!=NULL) { cout<<pCurNode->data; if(pCurNode->next) cout<<"->"; pCurNode=pCurNode->next; } cout<<endl; }
(7)完整代碼
#include<iostream> #include<cstdio> #include<cstring> #include<algorithm> using namespace std; struct Node { int data; Node *next; }; struct List { Node *head; int length; }; void AddNode(List &list,int dt) { Node *pCurNode=new Node; //開辟一個Node類型數據的空間,將地址返回給pCurNode pCurNode->data=dt; pCurNode->next=NULL; if(list.head==NULL) //如果當前插入的是鏈表第一個節點 { list.head=pCurNode; list.length=1; }else //尾插法 { Node *pt=list.head; while(pt->next!=NULL)pt=pt->next; pt->next=pCurNode; list.length++; } } void DeleteNode(List &list,int num) { Node *pCurNode=list.head; Node *preNode=NULL; while(pCurNode!=NULL&&pCurNode->data!=num) { preNode=pCurNode; pCurNode=pCurNode->next; } if(pCurNode==NULL) { cout<<"Can't find"<<num<<"in the list"<<endl; return; } if(pCurNode==list.head) list.head=list.head->next;//如果刪除的節點是第一個節點,改變鏈表頭指針 else preNode->next=pCurNode->next; list.length--; delete pCurNode; } Node *FindNode(const List &list,int num) { Node *pCurNode=list.head; while(pCurNode) { if(pCurNode->data==num) { cout<<"找到了"<<num<<".\n"; return pCurNode; } pCurNode=pCurNode->next; } cout<<"無法找到"<<num<<endl; return NULL; } void Output(const List &list) { cout<<"鏈表:"; Node *pCurNode=list.head; while(pCurNode!=NULL) { cout<<pCurNode->data; if(pCurNode->next) cout<<"->"; pCurNode=pCurNode->next; } cout<<endl; } int main() { List lst; lst.head=NULL;lst.length=0; int x=3; for(int i=1;i<=5;i++) { int a; cin>>a; AddNode(lst,a); } Node *c=FindNode(lst,2); cout<<c->data<<endl; Output(lst); DeleteNode(lst,3); Output(lst); return 0; }