fontatag
fontatag
2017-05-19 08:47

小白,请求大家帮我改改程序,陷入了死循环退不出。。。。。。。谢谢大家

  • 单链表
  • 链表

#include
using namespace std;
#include
#include
typedef struct node
{
int data;
struct node next;
}NODE;
//建立链表,返回链表的头指针
NODE *createlink(int len)
{
NODE *h,*p,*s;
p=h=(NODE
)malloc(sizeof(NODE));
h->next=NULL;
for(int i=1;i<=len;i++)
{
s=(NODE *)malloc(sizeof(NODE));
scanf("%d",&s->data);
s->next=NULL;
p->next=s;
p=s;
}
return h;
}
//求表的长度
int getlength(NODE *h)
{
NODE *p;
p=h->next;
int num=0;
while(p!=NULL)
{
num++;
p=p->next;
}
return num;
}
//取元素操作
int findelement(NODE *h,int i,int len)
{
NODE *p;
p=h->next;
int count=1;
if(i>len&&i return -1;
while(p!=NULL&&count {
p=p->next;
count++;
}
return p->data;
}
//输出链表操作
void display(NODE *h)
{
NODE *p;
p=p->next;
while(p!=NULL)
{
printf("%d",p->data);
p=p->next;
}
}
//插入结点操作
void insertelement(NODE *h,int i,int t,int *len)
{
NODE *p=h,*s;
int j=0;
if(i>*len+1||i<1)
{
printf("这个结点位置错误\n");

}
while(p->next!=NULL&&j<i-1)
{
    p=p->next;
    j++;
}
s=(NODE *)malloc(sizeof(NODE));
s->data=t;
s->next=p->next;
p->next=s;
*len=*len+1;

}
//删除结点操作
void deletelement(NODE *h,int n,int *len,int *e)
{
NODE *p=h->next,*q;
int j=1;
if(n>*len||n<1)
{
printf("这个结点位置错误\n");

}
while(p!=NULL&&j<n-1)
{
    p=p->next;
    j++;
}
q=p->next;
p->next=q->next;
*e=q->data;
*len=*len-1;
free(q);

}
//销毁链表
void destroylink(NODE *h)
{
NODE *p;
while(h->data!=NULL)
{
p=h;
h=h->next;
free(p);
}
}
//单链表的逆置
void invertlink(NODE *h)
{
NODE *p=h->next,*q,*r;
h->next=NULL;
while(p!=NULL)
{
q=p->next;
p->next=h->next;
h->next=p;
p=q;
}
}
int main()
{
NODE *h;
NODE *p;
int len,i,n,t=4,e=0;
cout<<"请输入你要创建的长度:"< cin>>len;
h=createlink(len);
len=getlength(h);
cout<<"你要查找的位置:"< cin>>i;
findelement(h,i,len);
insertelement(h,i,t,&len);
display(h);
cout<<"你要删除的位置:"< cin>>n;
deletelement(h,n,&len,&e);
display(h);
invertlink(h);
display(h);
//destroylink(h);
//display(h);
return 0;
}

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答