链表的头插法和尾插法

Posted whtmomo

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了链表的头插法和尾插法相关的知识,希望对你有一定的参考价值。

链表的头插法和尾插法

本文的链表均是带头结点的链表。

链表可以说是最简单的链式结构,在C语言中,通常用结构体封装其数据域及指针域作为一个结点。

今天我们说的是链表结点的构造方式以及插入方式。

尾插法

 1 //尾插法
 2 
 3 void createlistR(LNode *&C,int a[],int n){
 4     LNode *s,*r;
 5     int i;
 6     C = (LNode*)malloc(sizeof(LNode));
 7     C->next = NULL;
 8     r = C;
 9     for(i = 0;i<n;i++){
10         s = (LNode*)malloc(sizeof(LNode));
11         s->data = a[i];
12         r->next = s;
13         r = r->next;
14     }
15     r->next = NULL;
16 }

 

即将节点依次接入链表末尾,称为尾插法

 

头插法

 为什么要把头插法放在尾插法后面来讲呢,头插法顾名思义,即每个节点都插入到头部。称为头插法。举个例子

已知链表L,头插法插入A,B,C

则有下列形式

L->A

L->B->A

L->C->B->A

我们可以发现,运用头插法建立链表,顺序是相反的。下面给出具体代码实现

 1 //链表头插法
 2 void creatlistF(LNode *&C,int a[],int n){
 3     LNode *s;
 4     int i;
 5     C = (LNode*)malloc(sizeof(LNode));
 6     C->next = NULL;
 7     for(i = 0;i<n;i++){
 8         s = (LNode*)malloc(sizeof(LNode));
 9         s->data = a[i];
10         
11         s->next = C->next;            // ***
12         C->next = s;
13     }
14 }
15 
16 /*    讲解 ***内容
17     为什么要 s->next = C->next;
18     解:因为是头插法,C指向的头结点是不动的,由题意知,此时C->next = NULL
19     

 希望对大家有所帮助~

以上是关于链表的头插法和尾插法的主要内容,如果未能解决你的问题,请参考以下文章

C实现头插法和尾插法来构建单链表(不带头结点)

单链表建立——头插法和尾插法

头插法和尾插法分别建立链表(复制即可应用)

C实现头插法和尾插法来构建非循环双链表(不带头结点)

博客作业03--栈和队列

Java实现单链表(头插法和尾插法)