当我运行此函数时,它不返回任何数字就返回所有数字?当我使用for循环时,它工作得很好吗?有人可以告诉我我要去哪里了吗?
struct node //structure node
{
int info;
struct node *link;
};
void sort(struct node *start) //function for sorting
{
struct node *p,*temp;
int r;
p = start;
temp = p->link;
while(p != NULL) //first loop
{
while(temp != NULL) //second loop
{
if(temp->info < p->info)
{
r=p->info;
p->info = temp->info;
temp->info = r;
}
temp = temp->link;
}
p = p->link;
}
}
答案 0 :(得分:4)
在外部while
循环的第一次迭代之后,temp
将是NULL
。但是,temp
不在内部while
循环中设置,因此它将保持NULL
。仅当start->info
不是最小的数字时,数字才会改变。
将分配temp = p->link
移到外部while循环中:
void sort(struct node *start)
{
struct node *p,*temp;
int r;
p = start;
while(p != NULL)
{
temp = p->link; // <-------
while(temp != NULL)
{
if(temp->info < p->info)
{
r=p->info;
p->info = temp->info;
temp->info = r;
}
temp = temp->link;
}
p = p->link;
}
}
答案 1 :(得分:2)
在代码中,您正在内部循环中移动temp指针,直到它到达NULL
,但在外部循环中您并未将其设置回temp = p->link;
;
请在
之后添加temp = p->link;
while(p != NULL) //first loop
{
更新后的功能应如下所示:
void sort(struct node *start)
{
struct node *p,*temp;
int r;
p = start;
while(p != NULL)
{
temp = p->link;
while(temp != NULL)
{
if(temp->info < p->info)
{
r=p->info;
p->info = temp->info;
temp->info = r;
}
temp = temp->link;
}
p = p->link;
}
}