前端————数据结构之链表

一、单向链表

前端————数据结构之链表_第1张图片

//js实现链表
class Node {
    constructor(element) {
        this.element = element
        this.next = null
    }
}
class linkedList {
    constructor() {
        this.size = 0
        this.head = null
    }
    //添加节点
    append(element) {
        //创建节点
        let node = new Node(element)
        //添加第一个节点
        if (this.head === null) {
            this.head = node
        } else {//添加第n个节点
            //获取链表的最后一个节点,使其next指向要添加的节点
            let current = this.getNode(this.size - 1)
            current.next = node
        }
        this.size++
    }
    //插入节点
    appendAt(position, element) {
        if (position < 0 || position > this.size) {
            throw new Error('error')
        }
        //创建节点
        let node = new Node(element)
        //在第0个位置插入
        if (position === 0) {
            node.next = this.head
            this.head = node
        } else {//在第n个位置插入
            let pre = this.getNode(position - 1)
            node.next = pre.next
            pre.next = node
        }
        this.size++
    }
    //删除节点
    removeAt(position) {
        if (position < 0 || position >= this.size) {
            throw new Error('error')
        }
        let current = this.head
        //删除第一个节点
        if (position === 0) {
            this.head=current.next
        } else {//删除第n个节点
            let pre = this.getNode(position - 1)
            current=pre.next
            pre.next=current.next
        }
        this.size--
    }
    //获取节点
    getNode(index) {
        if (index < 0 || index >= this.size) {
            throw new Error('error');
        }
        let current = this.head
        for (let i = 0; i < index; i++) {
            //next到index所在元素
            current = current.next
        }
        return current
    }
    //查找指定元素的索引
    indexOf(element) {
        let current=this.head
        for (let i = 0; i < this.size; i++){
            if (current.element === element) {
                return i
            }
            current=current.next
        }
    }
}
let ll = new linkedList()
ll.append(1)
ll.append(2)
ll.appendAt(0, 0)
ll.appendAt(3, 3)
ll.appendAt(2, 2)
ll.removeAt(2, 2)
console.log(ll.indexOf(2));
console.dir(ll, {
    depth: 100
})

二、双向链表

前端————数据结构之链表_第2张图片

三、循环链表

前端————数据结构之链表_第3张图片

你可能感兴趣的:(算法每日一题,链表,数据结构,前端)