代码随想录算法训练营第三天 | 203.移除链表元素 707.设计链表 206.反转链表

链表分为单链表,双向链表和循环链表。            

不同于数组。链表中的节点在内存中的分布不是连续的,而是散落分布的。链表用于插入和查询的效率更高,相反,数组更多用于查询。js中自定义链表:

function ListNode(val, next) {

    this.val = (val===undefined ? 0 : val)

    this.next = (next===undefined ? null : next)

}

203.移除链表元素  

#1 自己看到题目的第一想法  

链表的移除操作,即如果当前的 value 为 target,那么将前一个节点的 next 指向下一个节点,但是关于如何实现代码,我是不太有思路的。例如如何循环整个链表?我个人觉得 可能是 while (next != null)

#2 看完代码随想录之后的想法    

自己对于链表的理解还是非常的表层,同时非常不熟练,此处附上 js 中如何删除元素的代码:

var removeElements = function(head, val) {

    const ret = new ListNode(0, head);

    let cur = ret;

    console.log(cur)

    while(cur.next) {

        console.log(cur, cur.next)

        // if next one is the val, then delete the next one

        if(cur.next.val === val) {

            cur.next =  cur.next.next;

            continue;

        }

        // if next one is the val, then delete this one

        cur = cur.next;

    }

    return ret.next;

};

#3 收获    

链表的删除在对于head的处理上是需要单独处理的,通常的做法是在头部加一个暂时的元素,最后return的时候再删掉即可。

707.设计链表 

#1 自己看到题目的第一想法

#2 看完代码随想录之后的想法  

#3 收获   

#4 类似题目  

206.反转链表 

#1 自己看到题目的第一想法

#2 看完代码随想录之后的想法   

#3 收获    

#4 类似题目 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容