主题:递归转非递归遇到问题了
duncan86
[专家分:0] 发布于 2006-05-01 09:39:00
struct node
{int num;
struct node *next;
};
void reserve(struct node * head)
{
if(head!=NULL)
{
reserve(head->next);
}
}
怎么写一个非递归的翻转函数啊?
回复列表 (共3个回复)
沙发
rickone [专家分:15390] 发布于 2006-05-01 11:26:00
这个函数能正常工作吗?
板凳
duncan86 [专家分:0] 发布于 2006-05-01 13:50:00
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 楼
if007 [专家分:650] 发布于 2006-05-02 04:08:00
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楼的是否一样,我觉得不一样.
一般转换是不改变其结构的.
而这里却改变了其结构,只是表面的效果一般罢了.
我来回复