Я думал, что для сортировки я буду использовать strcmp() для сравнения строк, а затем вставлять на основе значения. Это код,
Ваш код не работает, когда head
равно NULL
. head
становится temp
и сразу же используется.
Отсутствует заголовок и первый printf() не завершается символом ';' так это синтаксическая ошибка
Я исправил следующие проблемы:
printf()
из-за отсутствия ;
.head
является NULL
.insert()
неправильно, если добавляемый узел должен быть новым корнем.for
-цикл подходит лучше, чем while
-цикл. Любой вариант правильный.#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct node {
char name[50];
struct node *next;
};
struct node *insert(struct node *head, const char *name) {
struct node *toinsert = malloc(sizeof(struct node));
strcpy(toinsert->name, name);
if (!head || strcmp(name, head->name) <= 0) {
toinsert->next = head;
return toinsert;
}
struct node *temp = head;
for(; temp->next && strcmp(name, temp->next->name) > 0 ; temp=temp->next);
toinsert->next = temp->next;
temp->next = toinsert;
return head;
}
void print(struct node *head) {
for(; head; head=head->next) {
printf("%s\n", head->name);
}
}
int main() {
struct node *head = insert(NULL, "B");
head = insert(head, "A");
head = insert(head, "C");
print(head);
}
и вывод:
A
B
C
Я не могу быть более благодарен за вашу помощь, потому что она развеяла многие мои концептуальные сомнения, а также синтаксические ошибки!
Я так думаю, не так ли? Я определил голову только как узел и передал ее как указатель в функцию.