面試題13:在O(1)時間刪除鏈表結點

劍指Offer面試題13:在O(1)時間內刪除鏈表結點(js)實現

題目描述:給定單向鏈表的頭指針和一個結點指針,定義一個函數在O(1)時間刪除該結點。


    //鏈表
    function LinkList(){
        var Node = function(element) {
            this.element = element;
            this.next = null;
        }

        var head = null,
            length = 0;

        //在尾部插入結點
        this.append = function(element) {
            var node = new Node(element);
            if(head === null) {
                head = node;
            }else {
                var current = head;
                while(current.next) {
                    current = current.next;
                }
                current.next = node;
            }
            length ++;
        }

        //刪除節點
        this.deleteNode = function(delete_node) {
            if(!delete_node) return;

            //要刪除的結點不是尾結點
            if(delete_node.next !== null) {
                var pNext = delete_node.next;
                delete_node.element = pNext.element;
                delete_node.next = pNext.next;
            }
            //鏈表只有一個結點,刪除頭結點
            else if(delete_node === head) {
                head = null;
            }
            //刪除的是鏈表的尾結點
            else {
                var current = head;
                while(current.next.next) {
                    current = current.next;
                }
                current.next = null;
            }
            length --;
        }

        //轉化成字符串
        this.toString = function(){
            var current = head,
                str = '';
            while(current) {
                str = str + current.element + ' ';
                current = current.next;
            }
            return str;
        };
    }


    var list = new LinkList();
    list.append(15);
    list.append(10);
    list.append(8);
    list.append(6);
    list.append(3);

    console.log(list.toString());
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章