链表的动态创建
头插法
struct Test* creatFromHead(struct Test* head)
{
struct Test* new;
new=(struct Test*)malloc(sizeof(struct Test));
printf("input your new node data:\n");
scanf("%d",&(new->data));
if(head == NULL)
{
head=new;
}
else
{
new->next=head;
head=new;
}
return head;
}
优化:
//头插节点
struct Test* insertFromHead(struct Test* head,struct Test* new)
{
if(head == NULL)
{
head=new;
}
else
{
new->next=head;
head=new;
}
return head;
}
struct Test* creatLink(struct Test* head)
{
struct Test* new;
while(1)
{
new=(struct Test*)malloc(sizeof(struct Test));
printf("input your new node data:\n");
scanf("%d",&(new->data));
if(new->data == 0)
{
printf("0 quit!");
free(new);
return head;
}
head=insertFromHead(head,new);
//调用独立函数,灵活性更高
}
}
尾插法
struct Test* insertBehind(struct Test* head,struct Test* new) //尾插节点
{
struct Test* point=head;
if(point == NULL)
{
head=new;
return head;
}
while(point->next != NULL)
{
point=point->next;
}
point->next=new;
return head;
}
struct Test* creatLink2(struct Test* head)
{
struct Test* new;
while(1)
{
new=(struct Test*)malloc(sizeof(struct Test));
printf("input your new node data:\n");
scanf("%d",&(new->data));
if(new->data == 0)
{
printf("0 quit!");
free(new);
return head;
}
head=insertBehind(head,new); //调用独立函数,灵活性更高
}
}