链表的创建,插入,删除,逆序

来源:互联网 发布:mp3刷机软件 编辑:程序博客网 时间:2024/05/22 13:32

今晚折腾了一晚,发现还是临界条件没设置好,下面是更新版的:

#include<iostream.h>struct Node{int num;Node *next;Node *LChild;Node *RChild;};Node *Creat(){int n=0;Node * p1,*p2,*head;//Node *p1,p2,head和这个声明不同head=NULL;p1=new Node;    p2=new Node;head=new Node;head->next=p2;head->LChild=NULL;head->RChild=NULL;cout<<"input a num"<<endl;cin>>p2->num;while(1){    cout<<"input a num"<<endl;cin>>p1->num;if(p1->num==0){                p2->next=NULL;break;}p1->next=NULL;//系统保证指向空指针的地方不指向任何函数或变量    p2->next=p1;    p2=p1;p1=new Node;p1->LChild=NULL;        p1->RChild=NULL;}//p2=NULL并没有作用,是因为改变的是p2指针的值,而p2指针指向的地方的值没变    //p2=NULL;cout<<"after"<<endl;return head;}void Print(Node *a){Node *p=a->next;while(p!=NULL){      cout<<p->num<<endl;   p=p->next;}}void Insert(Node *a){Node *p=new Node;    cout<<"input a num"<<endl;cin>>p->num;p->next=a->next;a->next=p;}void Delete(Node *a){int b;int n=0;    cout<<"input a num that you want to delete"<<endl;cin>>b;     Node *p=a;Node *p1=p->next;    while(p1->num!=0){     if(p1->num==b) { p->next=p1->next; n=1; delete p1;         break; } p=p1; p1=p1->next;}if(n==0)cout<<"没有这个数"<<endl;}Node *ReTail(Node *a){   Node *t=new Node;   //cout<<a->num<<endl;   a的初始值是没有确定的   Node *p=a->next;   Node *q=a->next->next;   while(q!=NULL)   {   if(p==a->next)   {   p->next=NULL;   t=q->next;       q->next=p;           p=q;       q=t;   delete a;   continue;   }       t=q->next;   q->next=p;       p=q;   q=t;   }   Node *head;   head = new Node;   head->next=p;   return head;}void main(){Node *a;//a=new Node;    //不加a=new Node;  直接cout<<a->num<<endl; 就会出错,因为还没初始化a=Creat();  cout<<endl; cout<<endl; cout<<endl; Print(a); cout<<endl; cout<<endl; cout<<endl; Insert(a); cout<<endl; cout<<endl; cout<<endl; Print(a); cout<<endl; cout<<endl; cout<<endl; Delete(a); cout<<endl; cout<<endl; cout<<endl; Print(a); cout<<endl; cout<<endl; cout<<endl; Node *q=ReTail(a); cout<<endl; cout<<endl; cout<<endl; Print(q);}




原创粉丝点击