链表分为单链表,双向链表和循环链表。
不同于数组。链表中的节点在内存中的分布不是连续的,而是散落分布的。链表用于插入和查询的效率更高,相反,数组更多用于查询。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 类似题目