实现一个双向链表

32 阅读1分钟

demo如下

function  ListNode(key) {
    this.key = key
    this.next = null
    this.prev = null
}


class DoubleLinkedList {

    constructor() {
        this.head = null
    }

    // node2 head =node1 
    // node.next = null
    // node.prev = node1
    // node1 prev = null
    // node.next = 

    insert(node) {

        if ( this.head !== null ) {
            node.prev = this.head
            this.head.next = node
        }

        this.head = node


    }

    // node.prev   next - node.next
    // node.next   prev = node.prev
    delete(node) {
        node.prev.next  = node.next
        node.next.prev  = node.prev
        node.prev = null
        node.next = null
    }

    find(node) {
        
        let p = this.head

        while ( p && p !== node ) {
            p = p.prev
        }

        return p || null;
    }

}

let list = new DoubleLinkedList()

const node1 = new ListNode('00')
const node2 = new ListNode('kk')
const node3 = new ListNode('bzg')

list.insert(node1)
list.insert(node2)
list.insert(node3)


// 输出kk
console.log(list.find(node2).key) 


list.delete(node2)

// 输入null
console.log(list.find(node2)) 

console.log(node2)
// node1的下一个由2变成了3
console.log(node1)
// node3的上一个由2变成了1
console.log(node3)