在写合并链表的时候遇到一个while循环把条件换一下就会出错
在while(current && u->e>current->e )这个语句中把&&两边的条件换一下子就会报错提醒thread 1 received segmentation fault,SIGSEGV
#include<stdio.h>
#include<stdlib.h>
typedef struct list{
double var;
int e;
struct list *next;
}list;
/*按增序初始化链表*/
void initial_list(list *head){
list *u=(list*)malloc(sizeof(list));
list *pc;
list *current;
pc=head;
current=head->next;
// printf("%p",current);
printf("输入系数:");
scanf("%lf",&u->var);
printf("输入指数:");
scanf("%d",&u->e);
u->next=NULL;
while(current && u->e>current->e ){
pc=current;
current=current->next;
}
pc->next=u;
u->next=current;
}
/*合并链表,这个没错不用看*/
void insert_list(list *la,list *lb){
list *pc=la,*pa=la->next,*pb=lb->next;
list *temp1,*temp2;
while(pa && pb){
if(pa->e > pb->e){
pc->next=pb;
pc=pb;
pb=pb->next;
}
else if(pa->e==pb->e){
if(pa->var+pb->var==0){
temp1=pb;temp2=pa;free(temp1);free(temp2);
pb=pb->next; pa=pa->next;
}
else{
pa->var+=pb->var;
pc->next=pa;
pc=pa;
pa=pa->next;
pb=pb->next;
}
}else{
pc->next=pa;
pc=pa;
pa=pa->next;
}
}
pc->next=pa ? pa:pb;
free(lb);
}
/*打印链表*/
void show_list(list *la){
la=la->next;
while(la){
printf("+(%.1f)x^%d",la->var,la->e);
la=la->next;
}
printf("\n");
}
/*释放内存空间*/
void free_list(list *la){
list *temp;
while(la){
temp=la->next;
free(la);
la=temp;
}
}
int main()
{
list *la=(list *)malloc(sizeof(list));
list *lb=(list *)malloc(sizeof(list));
int i=0;
int sum;
la->next=NULL;
lb->next=NULL;
printf("输入la有几项:"); scanf("%d",&sum);
for(;i<sum;i++){
initial_list(la);
}
show_list(la);
printf("输入lb有几项:"); scanf("%d",&sum);
for(i=0;i<sum;i++){
initial_list(lb);
}
show_list(lb);
insert_list(la,lb);
show_list(la);
return 0;
free_list(la);
}
设置断点调试的时候就是在initial_list函数中的while语句while(current && u->e>current->e )交换&&两边条件就会报错
我怀疑是不是没有分配给u空间于是还初始化了一下添加了u->e=0;但是没用
我想要达到的结果,如果你需要快速回答,请尝试 “付费悬赏”