面试题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());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值