此代码如何以链接列表中的相反顺序打印

时间:2014-03-12 03:05:48

标签: recursion

以下函数对第一个节点作为头的给定链表进行了什么操作?

 void fun1(struct node* head)

 {

    if(head == NULL)
    {
        return;
    }

    fun1(head->next);

    printf("%d  ", head->data);
 }

2 个答案:

答案 0 :(得分:1)

就像你已经将列表元素推入堆栈然后将每个元素弹出并打印它直到堆栈为空。虽然使用调用堆栈而不是数据结构。

答案 1 :(得分:0)

假设你有这个:

head= |data=a
      |next= |data=b
             |next= |data=c
                    |next=NULL

现在你打电话给fun1(头):

call fun1(head):
     calls fun1(head->next):
          calls fun1(head->next->next):
               calls fun1(head->next->next->next):
                    returns, because head->next->next->next is NULL
               prints c (from head->next->next->data)
          prints b (from head->next->data)
     prints a (from head->data)

PS:您可能会发现了解如何针对此类问题逐步执行代码会很有帮助:http://www.thegeekstuff.com/2010/03/debug-c-program-using-gdb/