【问题标题】:reversing link list using recursion.why not head gets initialized with last node of the reversed list after completion of recursion?使用递归反向链接列表。为什么在递归完成后不使用反向列表的最后一个节点初始化头部?
【发布时间】:2015-05-01 06:31:20
【问题描述】:

这段代码运行良好,但我不明白为什么程序完成后 head 是新列表的第一个节点。

void reverse(struct node* h)
{

    if(h->next==NULL)         
    { 
       head=h;
       return;
    }
    reverse(h->next);
    struct node* q=h->next;
    q->next=h;
    h->next=NULL;   
}

【问题讨论】:

    标签: c linked-list


    【解决方案1】:

    诀窍在于递归退出步骤:

    if(h->next==NULL)         
    { 
       head=h;
       return;
    }
    

    该代码允许函数从递归中逃脱:

    reverse(h->next);
    

    它的作用是将原始列表的最后一个元素分配为头,您需要了解 if 分支只会在递归的最后一步执行,这就是为什么头被分配第一个新列表的节点。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-12-19
      • 2013-03-04
      • 1970-01-01
      • 2016-08-01
      • 1970-01-01
      相关资源
      最近更新 更多