一、前插法创建单链表
算法步骤:
(1)创建一个只有头结点的空链表。
(2)根据创建链表包括的元素n,循环n次以下操作:
生成新结点;——>输入元素值赋给新结点数据域;——>将新结点插入到头结点之后。
//前插法创建单链表
void CreateList_H(LinkList &L,int n)
{
//逆位序输入n个元素的值,建立带头结点的单链表L
L=new LNode;//先建立一个带头结点的单链表
L->next=NULL;
cout<<"带头结点的单链表构建成功!"<<endl;
cout<<"请逆位序输入"<<n<<"个元素";
for(int i=0; i<n; ++i)
{
LinkList p=new LNode;//生成一个新结点*p
cout<<"请输入第"<<i+1<<"个元素的值:";
cin>>p->date;//输入元素值赋给新结点*p的数据域
p->next=L->next;//把首元结点的地址赋值给新结点的数据域
L->next=p;//把新结点的地址赋值给头结点
}
}
二、后插法创建单链表
算法步骤:
(1)创建一个只有头结点的空链表。
(2)尾指针r初始化,指向头结点。
(3)根据创建链表包括的元素个数n,循环n次执行以下操作:
生成一个新结点*p;
输入元素值赋给新结点的数据域;
将新结点插入到尾结点之后;
尾指针r指向新的尾结点。
//后插法创建单链表
void CreatList_R(LinkList &L,int n)
{
//正位序输入n个元素的值,建立带头结点的空链表
L = new LNode;//先建立一个带头结点的空链表
L->next = NULL;
LinkList r=L;//尾指针r指向头结点
cout<<"带头结点的单链表构建成功!"<<endl;
cout<<"请正序输入"<<n<<"个元素"<<endl;
for(int i=0; i<n; i++)
{
LinkList p=new LNode;//生成新结点
cout<<"请输入第"<<i+1<<"个元素的值:";
cin>>p->date;//输入元素的值赋给*p的指针域
p->next=NULL;//因为是尾插法,新结点的指针域为空
r->next=p;//把p结点的地址给当前的尾结点
r=p;//插入的结点为新的尾结点
}
}