题目:建立一个线性链表
解题思路:建立一个线性链表的过程是一个动态生成链结点并依次将它们链接到链表中的过程。算法思想比较简单,只需从线性表的第1个数据元素开始依次获取表中的数据元素,每取得一个数据元素,就为该数据元素生成一个新的链结点,将取得的数据元素的数据信息送新结点的数据域的同时,见新结点的指针域置为NULL,然后将新的链结点插入到链表的末尾。当去第1个数据元素时,链表为空,此时直接将新的链结点的地址送list即可。
具体算法如下:
//定义链结点
class Node{
constructor (data, link) {
this.data = data,
this.link = link
}
}
//建立一个线性链表
function createLinklist(n) {
let p, r, list = null
let a , i
for ( i=1; i<=n; i++) {
a = Math.floor(Math.random()*10) //获取一个数据元素
p = new Node(a, null) //申请一个新的链结点,data赋值,指针域置空
if (list==null) {
list = p
} else {
r.link = p
}
r = p
}
return list
}
let list = createLinklist(10)
//打印链表以某种格式
function toString(list){
if ( list==null ) {
return "这是个空表"
}
let p = list
let str = list.data
while(p.link!=null){
p = p.link
str = str + '->' + p.data
}
return str
}
toString(list)
性能:
算法的时间复杂度为O(n)
