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

时间:2014-07-31 20:07:09

标签: c algorithm list sorting linked-list

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

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

我必须按字母顺序对列表进行排序。请记住,我无法在函数中实现排序或交换算法(也就是说,我无法创建' swapNodes'函数,并且它们在代码中实现它。

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

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

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

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

我已经检查了关于bubblesorting和节点交换的每一篇文章,但我可以让它工作。

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

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个节点时,此代码可以正常工作。如果有更多,它不会以正确的方式排序。此外,我不太确定我的教授使用哪种排序算法。

也许我的老师所做的不对,或者可能有更简单的方法。

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

希望你们能帮助我!

1 个答案:

答案 0 :(得分:1)

您的原始交换代码不会改变指向的节点的next指针到交换前指向的节点auxiliar(如果{{ 1}}不是列表中的第一个节点。