当我们想要存储一个表的数据时,我们可能刚开始会想到用一个数组来存储。当然当数据量较小的情况,我们设置数组的大小是不难的,但是如果表的大小并不是很确定,或者表的大小范围波动很大,那么使用数组来存储就不是很合适,因此我们需要使用动态存储,即链表。

链表是由一系列在内存中不连续的结构组成,每个结构含有表内元素以及指向下个结点的指针,可以称之为NEXT指针,最后一个结点的next指针指向NULL。

因此我们可以定义一个结构体node

链表 javascript 链表的基本操作_链表

这里的val可以定义为其他类型;

假设我们用一个头指针head来表示链表,那么当head的next指针为空时,这个链表也为空。

用个函数来判断是否为空,貌似c的函数并不能支持bool型的返回值,直接用int也一样

链表 javascript 链表的基本操作_链表 javascript_02

接下来我们需要建立一个链表:每次读入一个,或者是传入一个数组,将数组传入链表中

 

链表 javascript 链表的基本操作_链表_03

首先将head付给now,每次都将新建一个p指针,p的val=当前数组值,让now的next指针指向p,然后now往后移一位(始终保持在最后面)

同时数组指针也向后移一位。直到到了数组的最后一位(为-1)。

然后插入的话,如果不嫌效率低下,并且追求有序,那么很自然直接的想法是在尾部补上,这样时间复杂度就是O(n),代码应该很简单,就不写了

最简单的单链表构造就到此为止。

然后就是打印出单链表中所有元素

链表 javascript 链表的基本操作_结点_04

因为最后一个结点的值是-1,相当于是一个结束标志(个人写法)

练习1:两个升序链表,打印出L中由P所指定位置的元素:

链表 javascript 链表的基本操作_结点_05

练习2,:交换两个相邻元素(用指针)(我为了简单,直接就是交换了第一个和第二个元素)

链表 javascript 链表的基本操作_链表 javascript_06

 练习3:链表反转

链表 javascript 链表的基本操作_结点_07