А почему вы решили, что она не перезаписывается? Вот добавил одну строчку логирования, и видно как она перезаписывается
function ListNode(val, next) {
this.val = (val === undefined ? 0 : val)
this.next = (next === undefined ? null : next)
}
let list;
for(let c=1; c<=5; c++){
list=new ListNode(c, list); //Я не могу понять, как работает эта строка.
console.log('val=', list.val, 'next=', list.next); // <---------- вот эту
}
console.log(list);
val= 1 next= null
val= 2 next= ListNode {val: 1, next: null}
val= 3 next= ListNode {val: 2, next: ListNode}
val= 4 next= ListNode {val: 3, next: ListNode}
val= 5 next= ListNode {val: 4, next: ListNode}
ListNode {val: 5, next: ListNode}