(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<<". "; 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<<". "; 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; }