| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1681 人关注过本帖
标题:[求助]求问版主:这个解答的详细内容
只看楼主 加入收藏
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
我测试的是反向的,但是有中间阁了一个输出空的.

倚天照海花无数,流水高山心自知。
2006-10-27 18:26
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用菜鸟上路在2006-10-27 17:08:15的发言:

这说法是错误的,经过验证,仍然是反向的
以下是验证代码:
/* 带头接点*/

#include "Stdio.h"
#include "Conio.h"

typedef int type;
typedef struct Node
{
type info;
struct Node *next;
}Node;

void Create(Node *L,int num)
{ /*正向创建链表*/
int i;
Node *p,*q;
Node *s=L;
L=(Node *)malloc(sizeof(Node));
p=(Node *)malloc(sizeof(Node));
printf("Please input the element you want:");
scanf("%d",&p->info);
p->next=NULL;
L->next=s->next=p;
q=p;
for (i=1;i<num;i++)
{
p=(Node *)malloc(sizeof(Node));
printf("Please input the element you want:");
scanf("%d",&p->info);
p->next=NULL;
q->next=p;
q=p;
}
}

void print_link_list(Node *head,Node *root)
{

if(head->next==NULL)
{
printf("%5d-->",head->info);
return;
}
else
{
print_link_list(head->next,root);
if (head==root)
return;
printf("%5d-->",head->info);
}
}


int main(void)
{
Node La;
Create(&La,5);
print_link_list(&La,&La);
getch();
return 0;
}

你已经将代码改了,肯定是反向啦,你看看楼主的代码,另外,你创建单链表的用的变量太多了,而且根本没有必要弄两个头结点


c++/C + 汇编 = 天下无敌
2006-10-27 19:45
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

我只是加上了不输出head的代码,其他的没变
void print_link_list(Node *head,Node *root)
{


if(head->next==NULL)
{
printf("%5d-->",head->info);
return;
}
else
{
print_link_list(head->next,root);
if (head==root)
return;
printf("%5d-->",head->info);
}
}

只加了红色代码


2006-10-27 20:14
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 

创建链表用的变量确实多了,也没考虑这点,谢谢热情的提醒


2006-10-27 20:18
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
以下是引用菜鸟上路在2006-10-27 20:14:36的发言:

我只是加上了不输出head的代码,其他的没变
void print_link_list(Node *head,Node *root)
{


if(head->next==NULL)
{
printf("%5d-->",head->info);
return;
}
else
{
print_link_list(head->next,root);
if (head==root)
return;
printf("%5d-->",head->info);
}
}

只加了红色代码

加了红色的就正确了,这才是递归的意义,等程序自动“退栈”的时候就调用红色后面的输出代码,跟我用变量的方法差不多,而且你好像比搂住的函数多了个参数,反正搂住那个不是反向的,是正向的,你改的就是反向的啦,哈哈


c++/C + 汇编 = 天下无敌
2006-10-27 23:17
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用热情依然在2006-10-27 23:17:45的发言:

加了红色的就正确了,这才是递归的意义,等程序自动“退栈”的时候就调用红色后面的输出代码,跟我用变量的方法差不多,而且你好像比搂住的函数多了个参数,反正搂住那个不是反向的,是正向的,你改的就是反向的啦,哈哈

您似乎没运行过我那段代码,您可以去掉红色的试试,与不去红色代码的唯一区别就是没有输出头节点的info.其他都是一样的.
第一个是加了红色代码的,第二个是没加的

图片附件: 游客没有浏览图片的权限,请 登录注册

图片附件: 游客没有浏览图片的权限,请 登录注册


2006-10-27 23:40
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
LZ的代码确实是反向的

2006-10-27 23:41
热情依然
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:22
帖 子:715
专家分:0
注 册:2005-4-5
收藏
得分:0 
我错了,是我自己看错了,我将else{}里面的两段语句看返了

c++/C + 汇编 = 天下无敌
2006-10-28 11:21
nuciewth
Rank: 14Rank: 14Rank: 14Rank: 14
来 自:我爱龙龙
等 级:贵宾
威 望:104
帖 子:9786
专家分:208
注 册:2006-5-23
收藏
得分:0 
呵呵.各位大哥
请问怎样不使用root才可以消除我输出中的NULL.

倚天照海花无数,流水高山心自知。
2006-10-29 21:10
菜鸟上路
Rank: 4
等 级:贵宾
威 望:14
帖 子:1120
专家分:0
注 册:2006-3-21
收藏
得分:0 
以下是引用nuciewth在2006-10-29 21:10:27的发言:
呵呵.各位大哥
请问怎样不使用root才可以消除我输出中的NULL.

用第归估计不可以.


2006-10-30 12:34
快速回复:[求助]求问版主:这个解答的详细内容
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.021890 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved