数据结构

数据结构题目27:建立一个循环链表

2020-05-01  本文已影响0人  玲儿珑

具体算法如下:

//定义链结点
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)

上一篇下一篇

猜你喜欢

热点阅读