回 帖 发 新 帖 刷新版面

主题:递归转非递归遇到问题了

struct node
{int num;
struct node *next;
};

void reserve(struct node * head) 

if(head!=NULL) 
   { 
   reserve(head->next); 
      } 
}  

怎么写一个非递归的翻转函数啊?

回复列表 (共3个回复)

沙发

这个函数能正常工作吗?

板凳

void reverse(struct node **vq)
{     
    struct node *q,*p;
    p=(*vq)->next;
    (*vq)->next=/* 填空 */;
    while (p!=null)
   {
       q=p;
       p=/* 填空*/;
       q->next=/* 填空 */;
       (*vq)->next=q;
   }
}


vq是定义了的一个头结点,但是不参与翻转
想了很久都想不同,希望提示一下


这个不是要求跟那个翻转是一样的吗?我不会填空啊

3 楼

void reverse(struct node **vq)
{     
    struct node *q,*p;
    p=(*vq)->next;
    (*vq)->next=NULL; //设置尾结点为空
    while (p!=null)
   {
       q=p;
       p=p->next;
       q->next=(*vq); //使q->next指向*vq;
       (*vq)->next=q; //把q链接到*vq的尾结点.
   }
}

由于你的程序段功能没讲清楚,故不是十分肯定其意图.
至于怎么递归转非递归.一般都是通设栈保存中间变量.
至于2楼和0楼的是否一样,我觉得不一样.

一般转换是不改变其结构的.
而这里却改变了其结构,只是表面的效果一般罢了.

我来回复

您尚未登录,请登录后再回复。点此登录或注册