gpt4 book ai didi

c - 冒泡排序链表

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:06 25 4
gpt4 key购买 nike

我有这两个正在构建链表的结构:

struct Element {
int value;
struct Element *next;
};

struct List {
struct Element *first;
};

现在我想用冒泡排序对链表进行排序。我实现了 sortList 方法,它将当前元素的值与下一个元素的值进行比较。如果下一个元素的值大于当前元素的值,则它们必须交换。但目前它无法正常工作。

void sortList(List *list) {
Element *current = malloc(sizeof(Element));
current = list->first;
Element *nextElement = malloc(sizeof(Element));
nextElement = current->next;
Element *tmp = malloc(sizeof(Element));
tmp = NULL;

int changed = 1;
while (changed) {
changed = 0;
for (current; (current != NULL) && (nextElement != NULL); ) {
if (current->value > nextElement->value) {
tmp = current->next;
current->next = nextElement->next;
nextElement->next = tmp;
changed = 1;
}
current = current->next;
nextElement = nextElement->next;
}
}
}

最佳答案

在 for 之后,在重新启动 while 之前,您必须将 current 和 nextElement 设置为指向列表的开头!或者它们不改变并且 for 的测试条件立即失败。另外,mallocs 有什么意义?您仅将 current、next 和 temp 用作指向节点的指针,而不是真正的节点,我认为您可以将它们全部删除。并且您可以仅使用条件重写 for as while,它更具可读性。对不起我的英语。

编辑:如问题下所写,您需要更改列表中的指针。我认为最简单的方法是立即移动列表开头的较低元素,并将列表的头部更改为指向该元素。之后对列表的其余部分进行排序。

关于c - 冒泡排序链表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27274647/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com