根据结点插入位置的不同,链表的创建方法可分为前插法和后插法
前插法
前插法是通过将新节点逐个插入链表的头部(头节点之后)来创建链表,每次申请一个新节点,读入相应的数据元素值,然后将新节点插入到头节点之后。
后插法
后插法是通过将新节点逐个插入到链表的尾部来创建链表。同前插法一样,每次申请一个新节点,读入相应的数据元素值。不同的是,为了使新节点能够插入到表尾,需要增加一个尾指针 r 指向链表的尾结点。
前插法创建单链表过程示意图
后插法创建单链表过程示意图
C++代码
#include<iostream>
using namespace std;
typedef struct LNode
{
int data;
struct LNode *next;
}LNode,*LinkList;
/*
bool init(LinkList &L)
{
L = new LNode;
L->next = NULL;
return true;
}
*/
//前插法
void CreateList_Head(LinkList &L,LinkList &p,int n)
{
L = new LNode;
L->next = NULL;
for( int i=0; i<n; i++ )
{
p = new LNode;
cin>>p->data;
p->next = L->next;
L->next = p;
}
}
//后插法
void CreateList_Tail(LinkList &L,LinkList &p,int n)
{
LinkList r;//尾结点
L = new LNode;
L->next = NULL;
r =L;//之所以用尾结点,是因为L是指向头节点的 过L来找到这条单链表的,r是一个代替L移动操作的指针
for ( int i=0; i<n; i++ )
{
p = new LNode;
cin>>p->data;
p->next = NULL;
r->next = p;
r = p;
}
}
void result(LinkList L,int n)
{
LinkList p;
p = L->next;
for(int i=0;i<n;i++)
{
cout<<p->data;
p=p->next;
}
cout<<"\n";
}
int main()
{
LinkList L,p;
int n;
cout<<"数据结构---单链表\n";
cout<<"元素个数:";
cin>>n;
CreateList_Head(L,p,n);
cout<<"前插法结果:";
result(L,n);
CreateList_Tail(L,p,n);
cout<<"后插法结果:";
result(L,n);
}
结果展示
数据结构---单链表
元素个数:3
4
5
6
前插法结果:654
4
5
6
后插法结果:456
--------------------------------
Process exited after 8.898 seconds with return value 0
请按任意键继续. . .
有问题可以评论留言,欢迎各位大佬的批评指正,十分感谢!
转载需说明