Я не понимаю, почему двойной указатель. Он не имеет никакой цели. Итак, я на самом деле написал простую программу, которая делает то, что вам нужно.
Предполагая, что это будет структура вашего Mynbr
struct Mynbr {
int k;
struct Mynbr* next;
};
Тип определения структуры
typedef struct Mynbr Mynbr_t;
Моя реверсивный функция связана список будет, как это (который вызывается рекурсивно)
void reverseNumber(Mynbr_t* start) {
if (start == NULL) return;
static Mynbr_t* head;
Mynbr_t* current = start;
if (current->next != NULL) {
reverseNumber(current->next);
head->next = current;
head = current;
head->next = NULL;
} else
head = current;
}
Продолжите, проверьте это, используя этот ниже код. Он просто меняет список.
int main() {
size_t Mynbr_size = sizeof(Mynbr_t);
Mynbr_t* start = (Mynbr_t*) malloc(Mynbr_size);
Mynbr_t* current = start;
int i;
for (i=0; i<10; i++) {
current->k = i;
if (i!=9) {
current->next = (Mynbr_t*) malloc(Mynbr_size);
current = current->next;
}
}
current = start;
Mynbr_t* last = NULL;
while (current != NULL) {
printf("%d\n", current->k);
current = current->next;
if (current != NULL)
last = current; // you need to grab this to loop through reverse order
}
reverseNumber(start);
current = last;
while (current != NULL) {
printf("%d\n", current->k);
current = current->next;
}
current = last;
Mynbr_t* temp;
while (current->next != NULL) {
temp = current;
current = current->next;
free(temp); // always free the allocated memory
} last = NULL;
return 0;
}
Пожалуйста, напишите [Минимальный, полный и проверенный пример] (http://stackoverflow.com/help/mcve). Что такое 'current-> next'? Это действительно 'Mynbr **', а не 'Mynbr *'? – MikeCAT
Я думаю, что это должно быть reverseNumber (& (current-> next)); – Gregg
Включите предупреждения компилятора. – MikeCAT