使用递归函数反转打印链表

时间:2013-06-06 11:34:24

标签: c recursion singly-linked-list

我刚试了一个程序来反转打印一个单一的链表。

假设链接列表已准备好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);
    }
}

2 个答案:

答案 0 :(得分:13)

也许就像这样

void Reverse_List(abc_t *pNode){
    if(pNode==NULL)
        return;

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

答案 1 :(得分:3)

了解通话的工作原理

您有列表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的回答