Я создаю программу, в которой я получил список, заполненный числами из файла, и когда есть двойное значение, например 11 11, я помещаю число между парой чисел
Пример списка:
1 11 11 56 8 8 10
Список с добавленным числом i = 5:
1 11 5 11 8 5 8 10
, поэтому, учитывая, что связанный список построен следующим образом:
typedef struct Snode{
int info;
struct Snode *link;
}Tnode;
typedef Tnode *Tlist;
Я также попытался сделать рекурсивную функцию
Tlist InsertBtw(Tlist list,int i){
Tnode *prec,*succ,*newnode;
if(list==NULL)
return NULL; //PASSO BASE
prec=list;
succ=list->link;
if(prec->info==succ->info){
newnode=MakeNode(i);
prec->link=newnode;
newnode->link=succ;
list=list->link;
return InsertBtw(list,i);
}
list=InsertBtw(list->link,i);
return list;
}
Но происходит нечто странное. В последнем «цикле» рекурсивной функции, когда я передаю ссылку на список значений ->, это проверяет if(list==NULL)
, но если оно не проверено, то никогда не возвращает NULL, и это дает мне дамп ошибки ... что-то.
ОБНОВЛЕНО
Tlist InsertBtw(Tlist list,int i){
Tnode *prec,*succ,*newnode;
if(list->link==NULL)
return NULL;
prec=list;succ=list->link;
if(prec->info==succ->info){
newnode=MakeNode(i);
prec->link=newnode;
newnode->link=succ;
}
list->link=InsertBtw(succ,i);
return list;
}
Теперь проблема в том, что я вырезал последний узел, и он не вносит изменений в список