C - 使用排序算法交换链表中的节点

标签 c algorithm list sorting linked-list

我正在为一个学校项目工作,我需要使用任何排序算法(最好是冒泡算法)对链表进行排序 - 请注意,不允许交换每个节点数据,因为我需要交换节点。我无法粘贴我的项目的所有代码,因为它非常宽而且是西类牙语,因此我将向您展示我尝试实现节点交换的部分。

总而言之,项目本身很简单,一个链表,每个节点包含一个人的信息(姓名、姓氏、年龄等)。

我必须按字母顺序对列表进行排序。请记住,我不能在函数中实现排序或交换算法(也就是说,我不能创建一个“swapNodes”函数,而它们在代码中实现它。

我按照这个逻辑设法交换了两个节点:

firstNode = auxiliar->next;
auxiliar-> next = firstNode->next;
firstNode->next = auxiliar;

这可以完美地交换 2 个节点。

问题是当我必须使用排序算法实现此逻辑以使其对所有列表进行排序时,这就是我需要你们帮助我的地方。

我已经检查了所有关于冒泡排序和节点交换的帖子,但我可以让它正常工作。

我的教授试图帮助我,通过以下方式实现我的节点交换代码(请注意,作为示例,以下代码应按年龄排序):

while (flag == 1) {
        auxiliar = firstNode;
        flag = 0;

        if (auxiliar->edad > auxiliarSiguiente->edad) {

              firstNode = auxiliar->next;
              auxiliar-> next = firstNode->next;
              firstNode->next = auxiliar;
              flag = 1;

        }

        auxiliar3 = firstNode;

        while (auxiliar->next != NULL ) {

            if (auxiliar->age > auxiliarNext->age) {

                auxiliar2 = auxiliar->next;
                auxiliar->next = auxiliar2->next;
                auxiliar2->next = auxiliar;
                auxiliar3->next = auxiliar2;

            } else {
                auxiliar = auxiliar->next;
            }

            auxiliar3 = auxiliar3->next;

        }

    }

再一次,当有 2 个节点时,这段代码工作得很好。如果有更多,它不会以正确的方式排序。此外,我不太确定我的教授使用的是哪种排序算法。

也许我的老师做错了,或者有更简单的方法。

非常感谢您的反馈,因为我自己无法找到解决问题的方法。

希望大家能帮帮我!

最佳答案

您的原始交换代码不会更改 指向 的节点的 next 指针指向交换之前指向的节点 auxiliar(这如果 auxiliar 不是列表中的第一个节点,就会有。

关于C - 使用排序算法交换链表中的节点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25068021/

相关文章:

c++ - 我想以相反的顺序闪烁 LED

c - 使用单个字符指针迭代二维数组

algorithm - 如何系统地计算给定类型的居民数量?

algorithm - 包含一条边并在有边的树中生成权重最小的生成树

algorithm - 最小化数字加权和的绝对值

c - 有没有办法使用 gcc 将 C 转换为 MIPS?

c - 指向字符串的指针以及赋值和取消引用之间的区别

python - 迭代最后一个元素作为下一次迭代中的第一个重复

python - 如何忽略转义\python 列表?

c++ - 为什么分配器接口(interface)封装嵌套类的 "list"实现也受益于封装节点?