一个简单的小程序,有点小错,劳烦大家指点下
#include<stdio.h>#include<stdlib.h>
typedef int DataType;
struct Node; /*单链表结点类型*/
typedef struct Node *PNode; /*结点指针类型*/
struct Node
{
DataType info;
PNode link;
};
typedef struct Node *LinkList; /*单链表类型*/
LinkList createList_link(LinkList llist)
{
int n,i;
llist=(LinkList)malloc(sizeof(struct Node));//申请表头结点空间
if(llist!=NULL)
llist->link=NULL;
else
printf("out of space!");
PNode p,q;
printf("please input the number of value:");
scanf("%d",&n);
p=llist;
for( i=1;i<n;i++)
{
q=((PNode)malloc(sizeof(struct Node)));/*申请新结点*/
p->link=q->link;
p->link=q;
if(q==NULL)
{
printf("out of space!");
//return 0;
}
}
p=llist->link;
printf("please input the values:",n);
for(i=1;i<n;i++)
{
scanf("%d",&p->info);
p=p->link;
}
return llist;
}
LinkList reverse(LinkList llist) //逆置操作
{
PNode p,q,r;
p=llist;
if((p==NULL)||(p->link==NULL))
return p;
q=p->link;
p->link=NULL; //表头变表尾
while(q->link!=NULL)
{
r=q->link; //用r 保存q的下个结点,防止其在逆置的过程中丢失
q->link=p;
p=q; //q,r后移
q=r;
}
q->link=p;
llist=q; //重新设定链表的头指针
return llist;
}
void printList_link(LinkList llist)
{
//PNode p;
//p=llist->link;
printf("output the values");
while(NULL!=llist)
{
printf("%5d",llist->info);
//p=p->link;
llist=llist->link;
}
printf("\n");
}
int main()
{
LinkList llist=NULL;
llist=createList_link(llist);
printList_link(llist);
llist=reverse(llist);
printList_link(llist);
return 0;
}