C语言单链表问题 高手帮我看看问题出在哪

1.键盘输入一组元素,建立一个带头结点的单向链表(无序)。2.遍历单向链表。3.把单向链表中元素逆置(不允许申请新的结点空间)#include<stdio.h>#incl... 1.键盘输入一组元素,建立一个带头结点的单向链表(无序)。
2.遍历单向链表。
3.把单向链表中元素逆置(不允许申请新的结点空间)
#include <stdio.h>
#include <stdlib.h>
#define NULL 0
typedef struct node //定义链表元素结构体
{ int data;
struct node *next;
}node,*link;
link createlink(int n) //建链表
{ int i,x;
link p,q,head;
p=(link)malloc(sizeof(node)); //分配空间
p->next=NULL;
q=p;
head=p;
printf("请输入线性表L的元素:\n");
for(i=1;i<=n;i++)
{scanf("%d",&x);
p=(link) malloc(sizeof(node));
p->data=x;
p->next=NULL;
q->next=p;
q=p;
}
return(head); //返回头节点指针
}
void print(link head) //输出链表
{
printf("线性表L的元素为:\n");
link p;
p=head->next;
while(p)
{printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
void nixu(link head)
{
link p,r;
int i=0;
p=NULL;
while(head->next!=NULL)
{
r=head;
head=head->next;
r->next=p;
p=r;
}
head->next=r;
printf("逆序后的链式表为:\n");
p=head;
while(p->next!=NULL)
{
printf("%d\t",p->data);
p=p->next;i++;
}
printf("\n");
printf("链表长度为%d",i);
}

int len(link head) //求链表长度
{
link p;
int i;
p=head;
while(p->next!=NULL)
{
p=p->next;
i++;
}
printf("链表长度为%d",i);
return i;
}
void main()
{link head;
int n;
printf("请输入线性表L的长度:\n");
scanf("%d",&n);
head=createlink(n);
print(head);
nixu(head);
len(head);
}
求链表长度len这个函数哪里错了。
展开
 我来答
神皇期修士
2012-04-13 · TA获得超过192个赞
知道小有建树答主
回答量:144
采纳率:0%
帮助的人:158万
展开全部
1.void print(link head) //输出链表
{
link p;
printf("线性表L的元素为:\n");

否则编译不通过

2.i没有赋值

还有不少逻辑错误,不改了- -
追问
别呀,大侠帮我调一下,我都纠结了两个星期了。
调好了,我把我所有的积分都给你行不?
这段代码是我们数据结构老师给的,说让我们搞定。
我连逆序,是怎么逆过来的都搞不清楚。
追答
#include 
#include
//#define NULL 0
typedef struct node //定义链表元素结构体
{
int data;
struct node *next;
}node,*link;
link createlink(int n) //建链表
{
int i,x;
link p,q,head;
p=(link)malloc(sizeof(node)); //分配空间
p->next=NULL;
q=p;
head=p;
printf("请输入线性表L的元素:\n");
for(i=1;idata=x;
p->next=NULL;
q->next=p;
q=p;
}
return(head); //返回头节点指针
}
void print(link head) //输出链表
{
link p;
printf("线性表L的元素为:\n");
p=head->next;
while(p)
{
printf("%3d",p->data);
p=p->next;
}
printf("\n");
}
void nixu(link head)
{
int i = 0;
link p=NULL;
link r=NULL;
r=head->next;
head->next=NULL;
while(r!=NULL)
{
p=r;
r=r->next;
p->next=head->next;
head->next=p;

}
printf("逆序后的链式表为:\n");
p=head->next;
while(p!=NULL)
{
printf("%d\t",p->data);
p=p->next;i++;
}
printf("\n");
printf("链表长度为%d",i);
}

int len(link head) //求链表长度
{
link p;
int i = 0;
p=head;
p=p->next;
while(p!=NULL)
{
p=p->next;
i++;
}
printf("链表长度为%d",i);
return i;
}

void main()
{
link head;
int n;
printf("请输入线性表L的长度:\n");
scanf("%d",&n);
head=createlink(n);
print(head);
nixu(head);
len(head);
}

给你改好了~

逆序就是,把头结点后面的一列结点先拉出来,然后逐个插入插入到头结点紧跟着的那位置,,插完为止。

类似创建链表时的头插法.
前端懒无药救
2012-04-13 · TA获得超过284个赞
知道小有建树答主
回答量:208
采纳率:42%
帮助的人:56.3万
展开全部
i 没初始化
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式