链表题目总结(JS)

这几天跟着代码随想录做了链表篇章的题目,总体来说对链表有了进一步的理解。

首先是JS中的链表节点定义方式:

定义节点对象,以构建函数的方式构建,里面包括节点的两个属性:值,以及下一个节点的指针

        function ListNode(val, next) {
            this.val = val;
            this.next = next;
        }

 然后我们输入的都是数组,将数组转化为链表:

        //定义将数组转换为链表函数,采用函数表达式的形式定义函数
        var array2List = function(arr) {
            if (!arr.length) return null; //如果数组长度为0,则返回null
            var head = new ListNode(arr[0], arr[1]); //利用new关键字创建一个 头结点 对象
            var list = head; //创建一个变量用来表示链表,先把第一个节点头结点加入到链表中 
            for (var i = 1; i < arr.length; i++) {
                list.next = new ListNode(arr[i], arr[i + 1]); //将数组后面的数字加到链表中,也是利用创建节点对象的方式,但是这里只是一个个创建节点对象,并没有联系起来
                list = list.next; //让链表节点移动起来,将节点连起来
            }
            return head; //返回链表,头结点即可
        }

 力扣里面都是核心代码模式,所以对于输入输出都需要自己再额外注意一下。(还需要探索)

移除链表元素:在一些需要对节点进行操作的题目中,创建虚拟头结点有助于题目求解。

        //利用虚拟节点删除节点元素
        var removeElements = function(head, val) {
            const dummyNode = new ListNode(0, head); //定义一个虚拟头节点
            var current = dummyNode; //将虚拟头结点加入到链表中
            while (current.next) { //对链表的下一个节点的值进行判断(因为只能通过改变前一个节点来移除当前节点,如果下一个节点存在(从头结点开始)
                if (current.next.val === val) { //如果下一个节点的值等于要删除的值
                    current.next = current.next.next; //删除就是指向下下个节点
                } else {
                    current = current.next; //没有移动查找下一个
                }
            }
            return dummyNode.next //返回头结点就可以返回整个链表了(不包括创建的虚拟头结点)
        };

设计链表:这是一题考察链表基础知识比较全面的题目,包括了获取链表指定节点的数值,在链表的前面、后面以及中间插入值,以及删除指定节点。主要是对链表的长度,头节点尾节点进行更新操作,对于指定节点的位置进行逻辑判断。

//核心代码模式
        //节点定义函数,设置值和指针属性
        class LinkNode {
            constructor(val, next) {
                this.val = val;
                this.next = next;
            }
        }
        
        //所有操作围绕此链表的头尾节点以及链表长度考虑,每一步都要考虑
        //创建链表 单链表 存储头尾节点和节点数
        var MyLinkedList = function() {
            this._size = 0; //初始值节点数为0
            this._tail = null; //尾节点
            this._head = null; //头结点
        }
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值