回 帖 发 新 帖 刷新版面

主题:帮忙看下链表的程序哪里出错,谢谢!

#include<iostream>
using namespace std;
typedef struct lnode
{
 int data;
    lnode *next;
}linklist;
int m;
int listinsert(linklist *l,int i,int e)//在带头节点的单链表中第i个元素插入元素e
{
 int j=0;
 linklist *p,*s;
 p=new lnode;
 p=l;
 s=new lnode;
 while(p&&j<i-1)
 {
  p=p->next;
  ++j;
 }
 if(!p||j>i-1){return 0;}         
 s->data=e;
 s->next=p->next;
 p->next=s;
 return 1;
}
int listdelete(linklist *l,int i)//在带头节点的单链表中删除第i个元素e,并返回其值
{
 int j=0;
 linklist *p;
 p=new lnode;
 p=l;
 while(p->next&&j<i-1)
 {
  p=p->next;
  ++j;
 }
 if(!(p->next)||j>i-1){return 0;}
 linklist *q;
 q=new lnode;
 q=p->next;
 p->next=q->next;
 m=q->data;
 free(q);
 return 1;
}
void createlist_wei(linklist *l,int n)//尾插法
{
 l=new lnode;
 l->next=NULL;
 linklist *p,*s;
 p=new lnode;
 p=l;
 cout<<"请输入单链表:"<<endl;
 for(int i=n;i>0;--i)
 {
  s=new lnode;
  cin>>s->data;
  p->next=s;
  s->next=NULL;
  p=s;
 }
}
void createlist_tou(linklist *l,int n)//头插法
{
 l=new lnode;
 l->next=NULL;
 linklist *p;
 cout<<"请输入单链表:"<<endl;
 for(int i=n;i>0;i--)
 {   
  p=new lnode;
  cin>>p->data;
  p->next=l->next;
  l->next=p;
 }
}
void display(linklist *l)
{
 linklist *p;
 p=l->next;
 cout<<"链表为:";
 while(p!=NULL)
 {
  cout<<p->data<<" ";
  p=p->next;
 }
 cout<<endl;
}
void main()
{
 int a,i,e;
 cout<<"请输入链表长度:";
 cin>>a;
 linklist *l;
 l=new lnode;
 createlist_wei(l,a);
    //createlist_tou(l,a);
 display(l);
 cout<<"输入插入位置:";
 cin>>i;
 cout<<"输入插入数据:";
 cin>>e;
 cout<<"在链表第"<<i<<"个位置前插入元素"<<e;
 listinsert(l,i,e);cout<<endl;
 display(l);
 cout<<"输入要删除的位置:";
 cin>>i;
 cout<<"删除链表第"<<i<<"个位置元素"<<m<<endl;
 listdelete(l,i);
 display(l);
}

回复列表 (共1个回复)

沙发

#include<iostream>
using namespace std;
typedef struct lnode
{
 int data;
    lnode *next;
}linklist;
int m;
int listinsert(linklist *l,int i,int e)//在带头节点的单链表中第i个元素插入元素e
{
 int j=0;
 linklist *p,*s;
 p=new lnode;
 p=l;
 s=new lnode;
 while(p&&j<i-1)
 {
  p=p->next;
  ++j;
 }
 if(!p||j>i-1){return 0;}         
 s->data=e;
 s->next=p->next;
 p->next=s;
 return 1;
}
int listdelete(linklist *l,int i)//在带头节点的单链表中删除第i个元素e,并返回其值
{
 int j=0;
 linklist *p;
 p=new lnode;
 p=l;
 while(p->next&&j<i-1)
 {
  p=p->next;
  ++j;
 }
 if(!(p->next)||j>i-1){return 0;}
 linklist *q;
 q=new lnode;
 q=p->next;
 p->next=q->next;
 m=q->data;
 free(q);
 return 1;
}
void createlist_wei(linklist *l,int n)//尾插法
{
 //l=new lnode;就这里出了问题,这里是地址传递,呵
 l->next=NULL;
 linklist *p,*s;
 p=new lnode;
 p=l;
 cout<<"请输入单链表:"<<endl;
 for(int i=n;i>0;--i)
 {
  s=new lnode;
  cin>>s->data;
  p->next=s;
  s->next=NULL;
  p=s;
 }
}
void createlist_tou(linklist *l,int n)//头插法
{
//l=new lnode;这里也出了问题,这里是地址传递,呵
 l->next=NULL;
 linklist *p;
 cout<<"请输入单链表:"<<endl;
 for(int i=n;i>0;i--)
 {   
  p=new lnode;
  cin>>p->data;
  p->next=l->next;
  l->next=p;
 }
}
void display(linklist *l)
{
 linklist *p;
 p=l->next;
 cout<<"链表为:";
 while(p!=NULL)
 {
  cout<<p->data<<" ";
  p=p->next;
 }
 cout<<endl;
}
void main()
{
 int a,i,e;
 cout<<"请输入链表长度:";
 cin>>a;
 linklist *l;
 l=new lnode;
 createlist_wei(l,a);
    //createlist_tou(l,a);
 display(l);
 cout<<"输入插入位置:";
 cin>>i;
 cout<<"输入插入数据:";
 cin>>e;
 cout<<"在链表第"<<i<<"个位置前插入元素"<<e;
 listinsert(l,i,e);cout<<endl;
 display(l);
 cout<<"输入要删除的位置:";
 cin>>i;
 cout<<"删除链表第"<<i<<"个位置元素"<<m<<endl;
 listdelete(l,i);
 display(l);
}

我来回复

您尚未登录,请登录后再回复。点此登录或注册