Почему возникает ошибка сегментации в этом коде?Добавить упорядоченный элемент рекурсивно
void inserord(Lint *li, int x, Lint *k){
if(((*li)->value) > x){
Lint New;
New = (Lint) calloc(1,sizeof(Nodo));
New->value= x;
New->next = (*li);
(*k)->next = New;
return;
}else if(*li == NULL){
return;
}
*k = *li;
inserord(&((*li)->next), x, &(*k));
}
Проблема, кажется, когда я делаю * к = * ли, они являются указателями того же типа, Lint.
Это структура данных:
typedef struct slist *Lint;
typedef struct slist {
int value;
Lint next;
} Nodo;
Идея о * к, чтобы перейти к предыдущему узлу следующего рекурсивного вызова, так что я могу связать эту старую структуру к новым и новый к следующему.
EDIT:
это полный код:
typedef struct slist *Lint;
typedef struct slist {
int value;
Lint next;
} Nodo;
void inserord(Lint *li, int x, Lint *k){
if(((*li)->value) > x){
Lint New;
New = (Lint) calloc(1,sizeof(Nodo));
New->value= x;
New->next = (*li);
(*k)->next = New;
return;
}else if(*li == NULL){
return;
}
*k = *li;
inserord(&((*li)->next), x, &(*k));
}
void insertend(Lint *l, int x){
Lint new, aux;
new = (Lint) calloc(1,sizeof(Nodo));
new->value = x;
new->next = NULL;
if(*l==NULL){
*l=new;
return;
}
else
{
for(aux=*l; aux!=NULL ; aux = aux->next){
if(aux->next == NULL){
aux->next = new;
return;
}
}
}
}
int main(){
Lint listinha;
printf("\n");
insertend(&listinha, 1);
insertend(&listinha, 2);
insertend(&listinha, 3);
insertend(&listinha, 4);
insertend(&listinha, 5);
insertend(&listinha, 7);
listVal(&listinha);
Lint k = NULL;
inserord(&listinha, 4, &k);
listVal(&listinha);
return 0;
}
Если вы желая перестроить список, поскольку стек отключается, вам придется возвращать значение (узел). – ChiefTwoPencils
Lint k = NULL; inserord (& list, 4, &k); ---> список не NULL, только k – skills
Итак, что такое '& list'? Http://stackoverflow.com/help/mcve –