1. 程式人生 > >雙向鏈表

雙向鏈表

ret src cnblogs || his 雙鏈表 remove com node

雙向鏈表的結構

技術分享

雙向鏈表的節點

function Node(val){
    this.val = val;
    this.next = null;
    this.pre = null;
}

雙向鏈表的創建

尾插法

function tailCreateList(arr){
    var head = new Node();
    var pre = head;
    arr.forEach((item) => {
        var node = new Node(item);
        node.pre = pre;
        pre.next 
= node; pre = pre.next; }) }

頭插法

function headCreateList(arr){
    var head = new Node();
    var cur = head;
    arr.forEach((item) => {
        var node = new Node(item);
        node.pre = head;
        node.next = head.next;
        if(head.next){
            head.next.pre = node;
        }
        head.next 
= node; }) return head; }

雙鏈表的遍歷

function traverse(head,fVisit){
    var cur = head;
    fVisit = fVisit || function(item){console.log(item)}
    while(cur != null){
        fVisit(cur);
        cur = cur.next;
    }
}

雙鏈表的查找

function find(head,val){
    var cur = head;
    while(cur && cur.val != val){
        cur 
= cur.next; } return cur; }

雙鏈表的刪除

function remove(head,val){
    var cur = head;
    while(cur && cur.val != val){
        cur = cur.next;
    }
    if(cur != null){
        cur.pre.next = cur.next;
        cur.next.pre = cur.pre;
        cur.next = null;
        cur.pre = null;
    }
}

雙鏈表的插入

function insert(head,val,newVal){
    var cur = head;
    while(cur && cur.val != val){
        cur = cur.next;
    }
    if(cur != null){
        var node = new Node(newVal);
        node.next = cur.next;
        node.pre = cur;
        cur.next = node;
    }
}

雙向鏈表