我在尝试从最小值到最大值订购链表时出现问题,代码是:
struct nodo *orderList (struct nodo *p) {
struct nodo *head=p;
struct nodo *min=p;
int *tmp=NULL;
while (min != NULL) {
p = min;
// p = p->succ (not necessary i think)
while (p != NULL) {
if (p->info < min->info) {
tmp = &min->info;
min->info = p->info;
p->info = *tmp;
}
p=p->succ;
}
min=min->succ;
}
return head;
}
我得到的输出(我使用经过测试的函数来创建一个包含来自输入的n个节点的列表):
Number of elements: 4
insert 4 positive numbers:
4
3
2
1
1 -> 1 -> 1 -> 1 ->
答案 0 :(得分:1)
使用int *
时,在交换信息字段时,请参阅修改后的字段。
您应将tmp
声明为:
int tmp;
并相应地调整您的交换代码。
通过这种方式,您可以在更改之前复制min->info
的值。
答案 1 :(得分:1)
此代码不会交换数据
tmp = &min->info;
min->info = p->info;
p->info = *tmp;
第三行只是将数据移回原来的位置,因为min->info
现在包含p->info
。
你需要像这样交换
int tmp = min->info;
min->info = p->info;
p->info = tmp;
假设数据类型为int
,因为您没有发布struct
。