首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >反转列表而不复制(递归方法)

反转列表而不复制(递归方法)
EN

Stack Overflow用户
提问于 2019-05-31 06:50:42
回答 1查看 46关注 0票数 -1

我需要一点关于listhead移动的帮助..

这是我的教授方法,它是有效的,但我不能理解这一点。我认为每个调用都会更改listhead,但在pratic中,它会移动并指向最后一个元素。对此有什么帮助吗?非常感谢

代码语言:javascript
复制
    void reverserecv2(pt* listhead){
       pt curr=*listhead,suiv;
       if(curr && curr->next){
         suiv=curr->next;
         reverse(&(curr->next));
         suiv->next=curr;
        *listhead=curr->next;
         suiv->next->next=NULL;
        }
      }
   // my  structure : 

         typedef struct node{
            int data;
            struct node* next;
            }node;
            typedef node* pt ;
EN

回答 1

Stack Overflow用户

发布于 2019-05-31 07:19:30

如果您打印出一些数据,它可能会帮助您了解它在做什么;在*listhead被赋值的地方,在行中输入:

代码语言:javascript
复制
printf(“*(%p) = %p\n”, listhead, curr->next);

我做了一个镜头4列表:

代码语言:javascript
复制
*(0x79628344) = 0x79628320
*(0x79628354) = 0x79628320
*(0x79628364) = 0x79628320
*(0xbff92bd0) = 0x79628320

我们看到的是listhead本身有几个不同的值;当我们查看递归调用时,这是有意义的。每次调用它时,使用next作为listhead,以便更新每个节点。您可以从我的地址中看到,与其余地址不相邻的地址是一个堆栈地址,其中最后一个列表报头是堆栈地址。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56386599

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档