Я пытаюсь создать упорядоченный список в C, учитывая конкретный прототип:
int insertInOrder (list_t list, char *surname, char *name);
Функция должна вставить все узлы в правильном положении (в алфавитном порядке сначала по фамилии, затем по имени, по сравнениюв функции сравнение ) и возвращает 1, если вставка прошла, 0, если узел является дубликатом.
сравнение возвращает 1, если первый параметр больше, чемвторое, -1, если оно меньше, и 0, если два параметра равны.Я определил:
typedef struct list *list_t;
typedef struct node *link;
struct node{
char *name;
char *surname;
link next;
};
struct list{
link head;
};
Это моя функция:
int insertInOrder (list_t list, char *cognome, char *nome){
link t = list->head;
link p;
link x = malloc(sizeof(*x));
x->name = malloc(strlen(name)*sizeof(char));
x->name = name;
x->surname = malloc(strlen(surname)*sizeof(char));
x->surname = surname;
x->next = NULL;
if(list->head == NULL){
list->head = x;
return 1;
}
else{
while(t!=NULL){
if(comparison(t,x)<0){
p = t;
t = t->next;
}
else if(comparison(t,x)>0){
if(t == list->head){
x->next = list->head;
list->head = x;
return 1;
}
else{
p->next = x;
x->next = t;
return 1;
}
}
else if(comparison(t,x)==0)
return 0;
}
p->next = x;
return 1;
}
}
t - указатель на текущий узел, p - этоуказатель на предыдущий.
Когда я печатаю список, голова перезаписывается (новый узел заменяет старый, и список появляется, как будто у него только один узел), и я не могу понять, почему.
консольный результат
Есть предложения?