我不明白为什么双指针。它没有任何目的。所以,我已经写了一个简单的程序来做你需要的。
假设这将是确定结构
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;
}
您的
Mynbr
struct Mynbr {
int k;
struct Mynbr* next;
};
类型的结构
继续,使用下面的代码进行测试。它只是颠倒了名单。
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