在创建单项链表的时候我们经常有两种选择的创建方式:头插法和尾插法,在用C开发的项目中会经常用到,所以我们就在这里总结一下:
***************************我是分割线****************************
尾插法建立单链表:
/*
* Data: 14-11-4
* Version number:1
* Autor: Elian World
**/
void CreatelistR(LNode *&C,int a[],int n)// C为单链表的表头节点,a为链表对应元素,n为元素个数
{
LNode *s,*r; // s用来指向新申请的结点,r始终指向C的终端结点
int i;
C = (LNode *)malloc(sizeof(LNode)); // 申请C的头结点空间
C->next = NULL;
r = C; // r指向头结点,因为此时头结点就是终端结点
for(i = 1;i <= n;i++) // 循环申请n个结点来接受数组a中的元素
{
s = (LNode *)malloc(sizeof(LNode));// s指向新申请的结点
s->data = a[i]; // 用新申请的结点来接受a中的一个元素
r->next = s; // 用r来接纳新结点
r = r->next; // r指向终端结点,以便于接纳下一个到来的结点
}
r->next = NULL; // 数组a中所有的元素都已经装入链表C中,C的终端结点的
// 指针域置为NULL,C建立完成
}
头插法建立单项链表:
/*
* Data: 14-11-4
* Version number:1
* Autor: Elian World
**/
void CreatelistF(LNode *&C,int a[],int n)
{
LNode *s;
int i;
C = (LNode *)malloc(sizeof(LNode));
c->next = NULL;
for(i = 1;i <= n;i++)
{
s = (LNode *)malloc(sizeof(LNode));
s->data = a[i];
/*下面两句是头插法的关键步骤*/
s->next = C->next; // s所指新结点的指针域next指向C中的开始结点
C->next = s; // 头结点的指针域next指向s结点,使得s成为了新的开始结点
}
}