开学一直在学校数据结构,一直看菜谱,都不知道自己炒出来什么味道。
/*创建链表,实现非零整数入链并读取链表*/
#include<stdio.h>
#include<stdlib.h>
//声明结构类型
typedef struct Node
{
int val;
struct Node *next;
}Node;
//函数声明,返回类型为Node *
Node *create();
void main()
{
Node *head=NULL;
head=create(head);
while(head!=NULL)
{
printf("%d\n",head->val);
head=head->next;
}
}
//函数返回值为指向表头的指针
Node *create(Node *head)
{
Node *p1,*p2;
p1=(Node *)malloc(sizeof(Node));
scanf("%d",&p1->val);
while(p1->val!=0)
{
if(head==NULL)
head=p1;
else
p2->next=p1;
p2=p1;
p1=(Node *)malloc(sizeof(Node));
scanf("%d",&p1->val);
}
p2->next=NULL;
return head;
}
弄清关于结构声明的问题,Node为类型名,所以后来声明节点用 Node *head和用Node *做函数返回类型;
关于用结构和指向结构的指针做形参和函数返回值问题;
链表尾部指向NULL,本程序creat()函数开始少了p2->next=NULL,链表尾部指针没置空,导致主函数循环到链表尾部时出错。