面试题13:在O(1)时间删除链表结点

来源:互联网 发布:官方双色球选号软件 编辑:程序博客网 时间:2024/06/05 19:37

剑指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());
原创粉丝点击