具体算法实现如下:
//定义链结点
class Node{
constructor (data, llink, rlink) {
this.llink = llink,
this.data = data,
this.rlink = rlink
}
}
//建立一个带头结点双向链表
function createTwowayList(n) {
let p, r, list
list = new Node(null, null, null)
list.rlink = list
list.llink = list.rlink
let a , i
for ( i=1; i<=n; i++) {
// a = Math.floor(Math.random()*10) //获取一个数据元素
a = i
p = new Node(a, null, null) //申请一个新的链结点,data赋值,指针域置空
if (list.llink==list && list.rlink==list) {
list.rlink = p
p.llink = list
} else {
r.rlink = p
p.llink = r
}
r = p
}
r.rlink = list
list.llink = r
return list
}
var twowayList = createTwowayList(5)
//打印链表以某种格式
function toString(list){
if (list==null) {
return null
}
if (list.rlink==list) {
return "这是个空循环链表"
}
let p = list.rlink
let str = list.data
while( p!=list ){
str = str + '->' + p.data
p = p.rlink
}
str = str + '->' + p.data
return str
}
toString(twowayList)
网友评论