1.动态创建链表方法一:头插法
#include<stdio.h>
#include<stdlib.h>
struct Link
{
int data;
struct Link *next;
};
void printLink(struct Link *head)
{
struct Link *p;
p=head;
while(p != NULL)
{
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
putchar('\n');
}
//通过头插法,动态创建空间
struct Link* insertFromHead(struct Link *head,struct Link *new)
{
if(head==NULL)//head指针为空时,把第一个new地址赋给head,
{
head=new;
}
else if(head!=NULL)//主要逻辑:把每个新数据插到head数据前
{
new->next=head;
head=new;//使得每次的储存新地址new名,换成head,成为第一个数据。
}
return head;
}
struct Link* createFromHead(struct Link *head)
{
struct Link *new;
while(1)
{
new=(struct Link *)malloc(sizeof(struct Link));
new->next=NULL;//新创建的空间,要提前赋值
//提示输入data数据,并scanf拿到
puts("请输入data:");
scanf("%d",&(new->data));
if(new->data==0)//结束输入的标志
{
puts("0 node over");
free(new);
return head;
}
head=insertFromHead(head,new);
}
}
int main()
{
struct Link *head=NULL;
head=createFromHead(head);
printLink(head);
return 0;
}
2.动态创建链表方法一:尾插法
#include<stdio.h>
#include<stdlib.h>
struct Link
{
int data;
struct Link *next;
};
void printLink(struct Link *head)
{
struct Link *p;
p=head;
while(p!= NULL)
{
printf("%d ",p->data);
p=p->next;
}
putchar('\n');
}
struct Link* insertBehind(struct Link *head, struct Link *new)
{
struct Link *p=head;
if(p==NULL)
{
head=new;
head->next=NULL;
return head;
}
while(p->next != NULL)
{
p=p->next;
}
p->next=new;
return head;
}
struct Link *createLink(struct Link *head)
{
struct Link *new;
while(1)
{
new=(struct Link*)malloc(sizeof(struct Link));
new->next=NULL;//新创建的空间,要提前赋值
puts("please input your data:");
scanf("%d",&(new->data));
if(new->data==0)
{
puts("0 node over");
free(new);
return head;
}
head=insertBehind(head,new);
}
}
int main()
{
struct Link *head=NULL;
head=createLink(head);
printLink(head);
struct Link test={1000,NULL};
head=insertBehind(head,&test);
printLink(head);
return 0;
}