[英]Problems ordering a linked list in C
我在嘗試從最小到最大排序鏈表時遇到問題,代碼是:
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 ->
通過使用int *
,當您交換信息字段時,可以引用修改后的字段。
您應該將tmp
聲明為:
int tmp;
並相應地調整交換代碼。
這樣,您可以在更改之前復制 min->info
的值 。
此代碼不交換數據
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
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.