Как мне вернуть заголовок списка в этой рекурсивной функции? - PullRequest
1 голос
/ 31 января 2020

Я создаю программу, в которой я получил список, заполненный числами из файла, и когда есть двойное значение, например 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;
}

Теперь проблема в том, что я вырезал последний узел, и он не вносит изменений в список

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...