在C中订购链表的问题

时间:2015-04-27 18:11:48

标签: c list pointers swap

我在尝试从最小值到最大值订购链表时出现问题,代码是:

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 -> 

2 个答案:

答案 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