数据结构 c语言版 线性表就地逆置。我的这个程序哪里出错了,大神帮忙看看,谢谢!
typedefintdatatype;#include<stdio.h>#include<malloc.h>#defineNULL0typedefstructnode{d...
typedef int datatype;
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *head;
linklist *creatlist()
{
linklist *p,*q;
int n=0;
p=q=(struct node *)malloc(sizeof(linklist));
head=p;
p->data=0;
p->next=NULL;
p=(struct node *)malloc(sizeof(linklist));
scanf("%d",&p->data);
while(p->data!=-1)
{
n=n+1;
q->next=p;
q=p;
p=(struct node *)malloc(sizeof(linklist));
scanf("&d",&p->data);
}
q->next=NULL;
return head;
}
void print(linklist *head)
{
linklist *p;
p=head->next;
if(p==NULL)printf("This is an empty list.\n");
else
{
do {printf("%6d",p->data);p=p->next;
}while(p!=NULL);
printf("\n");
}
}
linklist *invelist()
{
linklist *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
return(head);
}
main()
{
linklist *head;
head=creatlist();
print(head);
head=invelist();
print(head);
} 展开
#include<stdio.h>
#include<malloc.h>
#define NULL 0
typedef struct node
{
datatype data;
struct node *next;
}linklist;
linklist *head;
linklist *creatlist()
{
linklist *p,*q;
int n=0;
p=q=(struct node *)malloc(sizeof(linklist));
head=p;
p->data=0;
p->next=NULL;
p=(struct node *)malloc(sizeof(linklist));
scanf("%d",&p->data);
while(p->data!=-1)
{
n=n+1;
q->next=p;
q=p;
p=(struct node *)malloc(sizeof(linklist));
scanf("&d",&p->data);
}
q->next=NULL;
return head;
}
void print(linklist *head)
{
linklist *p;
p=head->next;
if(p==NULL)printf("This is an empty list.\n");
else
{
do {printf("%6d",p->data);p=p->next;
}while(p!=NULL);
printf("\n");
}
}
linklist *invelist()
{
linklist *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}
return(head);
}
main()
{
linklist *head;
head=creatlist();
print(head);
head=invelist();
print(head);
} 展开
1个回答
展开全部
楼主这个程序啊,
第一:creatlist()函数写得不是很合理,每次创建链表会浪费一个空间,在最后一次分配空间之后,输入数据等于-1就没有用到其分配的空间。
第二:invelist()函数逻辑不对
linklist *invelist()
{
linklist *p,*q;
p=head->next; //p指向第一个节点,保存第一个节点
head->next=NULL; //头结点反转,指向NULL
while(p!=NULL)//向前遍历
{
q=p; //保存当前节点
p=p->next; //当前节点的下一个节点值
q->next=head->next; //这里head->next为NULL啊,肯定会出错啦,不分析了,楼主再缕缕思路
head->next=q;
}
return(head);
}
第一:creatlist()函数写得不是很合理,每次创建链表会浪费一个空间,在最后一次分配空间之后,输入数据等于-1就没有用到其分配的空间。
第二:invelist()函数逻辑不对
linklist *invelist()
{
linklist *p,*q;
p=head->next; //p指向第一个节点,保存第一个节点
head->next=NULL; //头结点反转,指向NULL
while(p!=NULL)//向前遍历
{
q=p; //保存当前节点
p=p->next; //当前节点的下一个节点值
q->next=head->next; //这里head->next为NULL啊,肯定会出错啦,不分析了,楼主再缕缕思路
head->next=q;
}
return(head);
}
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询