C 按字母顺序插入到链表中

C 按字母顺序插入到链表中,c,list,struct,linked-list,alphabetical,C,List,Struct,Linked List,Alphabetical,我被要求按字母顺序插入C中的链表,问题是我似乎无法按字母顺序得到链表。我想我的链表代码可能有一些问题。我已经在这方面工作了好几天了,但我似乎还是没办法想清楚。感谢您的帮助:) ps preferes只是一个函数,它告诉你当前学生的名字是否应该在其他名字之前。它作为布尔值工作,但不是真和假,而是1和0 Student* insert(Student* student, Student* list) { Student* current; if (list == NULL || (

我被要求按字母顺序插入C中的链表,问题是我似乎无法按字母顺序得到链表。我想我的链表代码可能有一些问题。我已经在这方面工作了好几天了,但我似乎还是没办法想清楚。感谢您的帮助:)

ps preferes只是一个函数,它告诉你当前学生的名字是否应该在其他名字之前。它作为布尔值工作,但不是真和假,而是1和0

Student* insert(Student* student, Student* list)
{
    Student* current;

    if (list == NULL || (precedes(student->name, list->name) > 0)) {
        student->next = list;
        list = student;
    } else {
        current = list;
        while(current->next != NULL && (precedes(current->name, student->name) > 0)) {
            current= current->next;
        }
        student->next = current->next;
        current->next = student;

    }
    return list;
}

好的,我在NominalAnimal的帮助下修复了它

发生的事情就在这条线上

while(current->next != NULL && (precedes(current->name, student->name) > 0)) {
我应该把这个学生的名字和名单上的下一个学生进行比较,而不是现在的学生


Cheers

在C中,零为假,非零为真,所有逻辑表达式的计算结果为
0
1
。例如,
(2>3)
等于
1
(-5>-4)
等于
0
。因此,您可以使用
prefers(before,after)
作为逻辑表达式,无需比较其返回值。至于你的问题,考虑是否应该将当前节点或下一个节点上的名称与要插入的名称进行比较。@ NominalAnimal,你是一个传奇。):当你解决问题时,你可以考虑自己回答它。准确地解释出了什么地方出了问题,以及你是如何解决的,这不仅对以后遇到类似问题的其他人和阅读你的问题和答案很有用,而且还可以帮助你“组织”你对它的想法:这反过来将帮助你在将来解决类似类型的问题。至少对我来说,这是非常有效的。