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这个函数哪里错了。 展开
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这个函数哪里错了。 展开
2个回答
展开全部
1.void print(link head) //输出链表
{
link p;
printf("线性表L的元素为:\n");
否则编译不通过
2.i没有赋值
还有不少逻辑错误,不改了- -
{
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);
}
给你改好了~
逆序就是,把头结点后面的一列结点先拉出来,然后逐个插入插入到头结点紧跟着的那位置,,插完为止。
类似创建链表时的头插法.
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询