|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#include<stdio.h>
#include<stdlib.h>
struct nmb
{
int n;
struct nmb *next;
};
void inmub(struct nmb **p,int n)
{
struct nmb *temp=(struct nmb *)malloc(sizeof(struct nmb));
temp->n=n;
struct nmb *swap,*p1=NULL;
swap=*p;
if(*p==NULL)
{
*p=temp;
temp->next=NULL;
}
else
{
if(n<=swap->n)
{
*p=temp;
temp->next=swap;
}
else
{
while(swap!=NULL&&n>swap->n)
// while(n>swap->n&&swap!=NULL) 此处条件互换程序会出问题
{
p1=swap;
swap=swap->next;
}
if(swap==NULL)
{
p1->next=temp;
temp->next=NULL;
}
else
{
p1->next=temp;
temp->next=swap;
}
}
}
}
int main()
{
struct nmb *nmb=NULL,*temp;
int n;
while(1)
{
printf("请输入数字:");
scanf("%d",&n);
if(n==-1)
{
break;
}
inmub(&nmb,n);
temp=nmb;
while(nmb!=NULL)
{
printf("%d ",nmb->n);
nmb=nmb->next;
}
nmb=temp;
printf("\n");
}
/* if(nmb==NULL)
{
printf("ddd");
}*/
return 0;
}
//为什么我注释的那个地方,条件互换之后程序就会出现问题了啊
我懂你的意思了。当你把while(swap!=NULL&&n>swap->n)这一句话放在前面时,程序一切正常。
当你把 while(n>swap->n&&swap!=NULL) 这一句话放在前面时先输入一个数,正常在输入一个比你第一次输入的那个数大的时候,程序就会出现问题。
你认为&&两边一样,对吗?
当你把 while(n>swap->n&&swap!=NULL)放在前面时,咱们假设以前只输入了一个5,现在又输入了一个8,因为8>5,所以执行while语句之内语句。swap=swap->next;此时swap=NULL,此时已经指向NULL。但是执行while语句时你还要执行n>swap->n,当然会出现错误了。
|
|