具体算法如下:
//定义链结点
class Node{
constructor (data, link) {
this.data = data,
this.link = link
}
}
//建立一个线性链表
function createCircleList(n) {
let p, r, list
list = new Node(null, null)
list.link = list
let a , i
for ( i=1; i<=n; i++) {
a = Math.floor(Math.random()*10) //获取一个数据元素
p = new Node(a, null) //申请一个新的链结点,data赋值,指针域置空
if (list.link==list) {
list.link = p
} else {
r.link = p
}
r = p
}
r.link = list
return list
}
var circleList = createCircleList(10)
//打印链表以某种格式
function toString(list){
if ( list.link==list) {
return "这是个空循环链表"
}
let p = list.link
let str = list.data
while( p!=list ){
str = str + '->' + p.data
p = p.link
}
str = str + '->' + p.data
return str
}
toString(circleList)
说明,带有头结点。
创建一个不带头结点的循环链表。
function createCircleList1(n) {
let p, r, list = null
let i
//建立一个无头结点的循环链表
for (i = 1; i <= n; i++) {
p = new Node(i, null)
if ( list==null ) {
list = p
} else {
r.link = p
}
r = p
}
p.link = list
//至此一个循环链表创建完了
return list
}
性能:
算法的时间复杂度为O(n)
网友评论