gpt4 book ai didi

c - 冒泡排序链表

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

我已经用助手 swapper() 制定了一个排序函数。该函数按节点在内存中的地址降序(从最高地址到最低地址)对列表中的节点进行排序。

只要列表的头部不变,该函数就可以很好地排序,但是当头部发生变化时,返回的只是头部及其后面的内容。我在某个地方丢失了列表的其余部分,我无法弄清楚。

到目前为止我的功能:

void swapper(NODE *left, NODE *right)
{
if(left->prev)
left->prev->next = right;
if(right->next)
right->next->prev = left;

left->next = right->next;
right->prev = left->prev;

right->next = left;
left->prev = right;
}
NODE *sort_nodes(NODE *head)
{
NODE *new_second, *new_first, *list = head;
int swaps;
do{
swaps = 0;
while(list)
{
if(&(*list) < &(*(list->next)))
{
swapper(list, list->next);
swaps = 1;
}
list = list->next;
}
list = head;
}while(swaps);
return list;
}

如果列表的头部是列表中声明的第三个节点,则示例输出:

Unsorted: 0x93657050 -> 0x936570d0 -> 0x93657070 -> 0x93657090 -> 0x93657030 -> 0x936570b0 -> 0x93657010 -> NULL
Sorted: 0x93657050 -> 0x93657030 -> 0x93657010 -> NULL

最佳答案

想一想就很简单了。

你有

head -> A -> B

然后你在不改变头部的情况下交换 A 和 B,所以你得到

head -|
v
B -> A

如果交换头部元素,则需要将头部指针移动到新的头部。

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

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