使用递归在C中反向链表

时间:2015-04-27 02:02:35

标签: c linked-list

我在C中编写了以下代码。我是C的新手。插入和打印功能似乎工作正常但我得到一个提示,说当我调用Reverse函数时程序停止工作。 我哪里出错?

migration

1 个答案:

答案 0 :(得分:3)

上述程序存在两个问题:

1)您有两个head变量。一个是全局变量,另一个是main函数的局部变量。该局部变量是传递给Reverse()的变量。由于函数的第一件事是解除引用它,程序崩溃了。删除head函数中的本地main()变量应解决此问题。

2)Reverse()函数在达到退出条件时正确返回head,但其余时间会发生什么?它在非退出条件情况下错过了返回。这是一个解决问题的差异:

    printf("calling reverse");
-   Reverse(p->next);
+   struct Node* ret;
+   ret = Reverse(p->next);
    struct Node* q = p->next;
    q->next = p;
    p->next = NULL;
+   return ret;