【问题标题】:Reverse printing a linked list using recursive function使用递归函数反向打印链表
【发布时间】:2013-06-02 09:38:21
【问题描述】:

我刚刚尝试了一个反向打印单数链表的程序。

假设链表已准备好包含 5 个元素: 1->2->3->4->5

我编写了一个以相反顺序打印的程序,例如:5 4 3 2 1
但我的程序只是打印为5 4 3 2; 1 没有打印。为什么?

int Reverse_List(abc_t *pNode) {
    abc_t *pTemp;
    int count = 5;

    if (pNode->pNext != NULL) {
        pNode = pNode->pNext;
        Reverse_List(pNode);
        printf("The node is %d\n", pNode->a);
    }
}

【问题讨论】:

  • the 1 is not printing. Why? printf("The node is %d\n",pNode->a); pNode 是 pNode->pNext
  • 建议:不需要int countabc_t *pTemp

标签: c recursion singly-linked-list


【解决方案1】:

看看调用是如何工作的

你有列表 1->2->3->4->5

现在递归开始为

pnode = 1;    pnode->next=2; (!NULL)      (print 2)   
  pnode=2;    pnode->next=3; (!NULL)      (print 3)   
    pnode=3;    pnode->next=4 (!NULL)     (print 4)   
       pnode=4;   pnode->next=5 (!NULL)   (print 5)   
          pnode=5;   pnode->next==NULL

所以在这里你可以看到当你有一个时它会在你前进指针时打印两个

有关正确代码,请参阅@BLUEPIXY 的答案

【讨论】:

    【解决方案2】:

    可能是这样

    void Reverse_List(abc_t *pNode){
        if(pNode==NULL)
            return;
    
        Reverse_List(pNode->pNext);
        printf("The node is %d\n", pNode->a);
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-30
      • 1970-01-01
      • 1970-01-01
      • 2014-11-27
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-06-06
      • 2013-12-12
      相关资源
      最近更新 更多