链表求助
#include <stdio.h>#include <stdlib.h>
#define N 5
typedef struct List
{
int data;
struct List *next;
}Node,*LinkList;
LinkList InitList_List(void)
{
LinkList head;
head=(Node *)malloc(sizeof(Node));
if(head==NULL)
exit(1);
head->next=NULL;
return head;
}
LinkList CreatList(int *a,int n)
{
LinkList head,p,q;
int i;
head=p=InitList_List();
head->data=0;
for(i=0;i<n;i++)
{
q=(Node *)malloc(sizeof(Node));
q->data=a;
p->next=q;
p=q;
}
p->next=NULL;
returnhead;
}
void OutList(LinkList head)
{
LinkList p;
p=head->next;
printf("head");
while(p->next!=NULL)
{
printf("->%3.0f",p->data);
p=p->next;
}
}
int main()
{
inta={1,2,3,4,5};
LinkList head;
head=CreatList(a,N);
OutList(head);
return 0;
}
为什么无法正确输出答案,而是head->0->0->0->0 data不是int吗,为什么用 %f
三个地方错误:
1.
LinkList CreatList(int *a,int n)
{
LinkList head,p,q;
int i;
head=p=InitList_List();
head->data=0;
for(i=0;i<n;i++)
{
q=(Node *)malloc(sizeof(Node));
q->data=a;
//这里要加一句
p->data = q->data; //如果不加这句最后输出 head->0->1->2->3->4; 而不是正确的 head->1->2->3->4->5;
p->next=q;
p=q;
}
p->next=NULL;
returnhead;
}
2 - 3错误:
void OutList(LinkList head)
{
LinkList p;
p=head->next;==>这里应为:p = head; 否则链表第一个值不会输出
printf("head");
while(p->next!=NULL)
{
printf("->%3.0f",p->data);===>> int 类型输出 printf("->%d", p->data);%f格式不对输出就是 0 了
p=p->next;
}
}
附上在你代码基础上修改这三点
#include <stdio.h>
#include <stdlib.h>
#define N 5
typedef struct List
{
int data;
struct List *next;
}Node,*LinkList;
LinkList InitList_List(void)
{
LinkList head;
head=(Node *)malloc(sizeof(Node));
if(head==NULL)
exit(1);
head->next=NULL;
return head;
}
LinkList CreatList(int *a,int n)
{
LinkList head,p,q;
int i;
head=p=InitList_List();
head->data=0;
for(i=0;i<n;i++)
{
q=(Node *)malloc(sizeof(Node));
q->data=a;
p->data = q->data;
p->next = q;
p=q;
}
p->next=NULL;
returnhead;
}
void OutList(LinkList head)
{
LinkList p;
p=head;
printf("head");
while(p->next!=NULL)
{
printf("->%d",p->data);
p=p->next;
}
}
int main()
{
inta={1,2,3,4,5};
LinkList head;
head=CreatList(a,N);
OutList(head);
return 0;
}
页:
[1]