Рассматривая список вроде 1-> 2-> 3-> 4-> 5
Tlist сделан так:
typedef struct node{
int info;
struct node *link;
}Tnode;
typedef Tnode *Tlist;
Я получил функцию listDeleteOdd, которая построена следующим образом
Tlist listDeleteOdd(Tlist list) {
if (list == NULL)
return NULL;
if (list->info % 2 == 1) {
Tnode *node = list->link;
DeleteNode(list);
return listDeleteOdd(node);
}
Tnode *node = listDeleteOdd(list->link);
list->link = node;
return list;
};
Удалить узел просто освобождает память данного узла на c. Кстати я не понимаю, как значение узла Tnode * после второго, если изменится. Как будто это должно быть NULL, так как цикл возвращает NULL, когда прототип «список» достигает конца. После завершения цикла происходит то, что происходит с узлом, а в конце - «список возврата»; что это возвращает ??
Я изучал рекурсию несколько месяцев go, и теперь все это так запутанно. Есть кто-то, кто может объяснить мне, как вся функция работает должным образом, потому что я вроде понимаю, как она работает, но я думаю, что есть некоторые шаги, которые мне не совсем понятны. Спасибо за терпение заранее.