单链表可以用头插法建立,也可以用尾插法建立。然而头插法虽然操作简单一点,顺序却与输入顺序相反,尾插法虽然操作复杂一点,但是顺序却与输入顺序一致,所以建议使用尾插法。
一、头插法建立链表
1、不用函数
代码:
#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
int main(void)
{
Linklist L1=NULL;//建立链表l
Node *p;
for(int i=1; i<=10; i++)//头插法建立链表
{
p=(Linklist)malloc(sizeof(Node));
p->data=i;
p->next=L1;
L1=p;
}
while(L1)
{
printf("%d ",L1->data);
L1=L1->next;;
}
printf("\n");
return 0;
}
2、用函数
代码:
#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
Linklist CreateList_front(int n);//头插法建立链表
void ShowList(Linklist L);//输出链表内容
int main(void)
{
Linklist L1;
int n;
scanf("%d",&n);
L1=CreateList_front(n);
ShowList(L1);
return 0;
}
Linklist CreateList_front(int n)
{
Linklist head=NULL;
Node *p;
int x;
for(int i=0; i<n; i++)//头插法建立链表
{
p=(Linklist)malloc(sizeof(Node));
scanf("%d",&x);
p->data=x;
p->next=head;
head=p;
}
return head;
}
void ShowList(Linklist L)//输出链表内容
{
while(L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}
1、不用函数
代码:
#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
int main(void)
{
Linklist L1;//建立链表l
Node *p,*x;
L1=(Linklist)malloc(sizeof(Node));
p=L1;//将p指向头结点
for(int i=1; i<=10; i++)//尾插法建立链表
{
x=(Linklist)malloc(sizeof(Node));
x->data=i;
p->next=x;
p=x;
}
p->next=NULL;//将最后一个节点的指针域置为空
L1=L1->next;//因为头结点为空,所以指向下一个节点这样才有数据域
while(L1)
{
printf("%d ",L1->data);
L1=L1->next;;
}
printf("\n");
return 0;
}
2、用函数
代码:
#include<stdio.h>
#include <malloc.h>
typedef struct linknode
{
int data;
linknode *next;
} Node,*Linklist;//Linklist表示结构体指针
Linklist CreateList_end(int n);//尾插法建立链表
void ShowList(Linklist L);//输出链表内容
int main(void)
{
Linklist L1;
int n;
scanf("%d",&n);
L1=CreateList_end(n);
ShowList(L1);
return 0;
}
Linklist CreateList_end(int n)
{
Linklist head=(Linklist)malloc(sizeof(Node));
Node *p,*e;
p=head;
int x;
for(int i=0; i<n; i++)//尾插法建立链表
{
e=(Linklist)malloc(sizeof(Node));
scanf("%d",&x);
e->data=x;
p->next=e;
p=e;
}
p->next=NULL;//将链表的最后一个节点的指针域置空
head=head->next;//因为头结点为空,所以所以指向下一个节点这样才有数据域
return head;
}
void ShowList(Linklist L)//输出链表内容
{
while(L)
{
printf("%d ",L->data);
L=L->next;
}
printf("\n");
}