1.代码如下
链表创建有多种方法,这是较好理解的一种
尾插法
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main(void)
{
int n,i,j,k;
scanf("%d",&n);
struct node *head,*p,*q,*t;
head=NULL;
while(n--)
{
scanf("%d",&k);//设输入2,3,5,8,9
p=(struct node *)malloc(sizeof(struct node));
p->data=k;
p->next=NULL;
if(head==NULL)//从if开始到下面的p=q是链表的核心思想
{
head=p;//为下面输出时从头结点开始遍历做准备,第一个创建的结点,头指针指向这个结点
}
else//接下来是链表的难点、、设q{2,next},
{
q->next=p;//q->next={3,next}
}
q=p;//q={3,next};相当于q指向新设结点 }
}
t=head;//从头结点开始输出
while(t!=NULL)
{
printf("%d\t",t->data);
t=t->next;
}
} 头插法
#include<stdio.h>
#include<stdlib.h>
struct node
{
int data;
struct node *next;
};
int main(void)
{
int n,i,j;
struct node *head,*p;
scanf("%d",&n);
head=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
for(i=0;i<n;i++)
{
scanf("%d",&j);
p=(struct node *)malloc(sizeof(struct node));
p->data=j;///这三行相比与尾插法有较大不同,相当与是将最开始创建的结点一直往后移动
p->next=head->next;//新结点的下一个地址为空
head->next=p;创建的头结点指向新进结点
}
while(p!=NULL)
{
printf("%d ",p->data);//头插法为逆序输出
p=p->next;
}
}struct node *create(int n)//尾插和头插法另外两种实现
{
int a;
struct node *head,*end,*p;
head=end=(struct node *)malloc(sizeof(struct node));
head->next=NULL;
while(n--)
{
scanf("%d",&a);
p=(struct node *)malloc(sizeof(struct node));
p->data=a;
end->next=p;/*p->next=head->next;*/
end=p;/*head->next=p;*/
}
p->next=NULL;
return head;/*return end;*/
}

本文详细介绍了链表的创建方法,包括尾插法和头插法,并提供了完整的C语言代码示例。通过这两种方法,读者可以深入理解链表的基本操作及其实现原理。

9638

被折叠的 条评论
为什么被折叠?



