Мне нужен некоторый указатель на то, как работает память в Javascript.В моей реализации удаления n-го узла из хвоста связанного списка у меня есть заполнитель resultHead.
В конце кода у меня есть консольный лог для resultHead, и в первый раз это просто исходное назначение head:
{"val": 1, "next":{ "VAL": 2, "следующий": { "VAL": 3, "следующий": { "VAL": 4, "следующий": { "VAL": 5, "следующий": нулевая}}}}}
Но второй раз после того, как у меня есть эта строка:
slow.next = slow.next.next
Затем консоль регистрируетсяout:
{"val": 1, "next": {"val": 2, "next": {"val": 3, "next": {"val": 5, "next": null}}}}
/**
* Definition for singly-linked list.
* function ListNode(val) {
* this.val = val;
* this.next = null;
* }
*/
/**
* @param {ListNode} head
* @param {number} n
* @return {ListNode}
*/
var removeNthFromEnd = function(head, n) {
if(head.next === null){return null}
// use resultHead as a place holder and its next is the actual head
let resultHead = new ListNode(null);
resultHead.next = head;
// find the difference between fast and slow pointer
let fast = resultHead;
let slow = resultHead;
for(let i=0; i<=n; i++){
fast=fast.next;
}
while(fast){
slow = slow.next
fast = fast.next
}
console.log(JSON.stringify(resultHead.next))
slow.next = slow.next.next
console.log(JSON.stringify(resultHead.next))
return resultHead.next;
};
removeNthFromEnd({"val":1,"next":{"val":2,"next":{"val":3,"next":{"val":4,"next":{"val":5,"next":null}}}}}, 2)
Таким образом, код должен удалить узел с помощью node.val = 4
Как slow.next = slow.next.next
может изменить значение resultHead
?
Я также пытался консольный лог resultHead
в разных местах, но только после того, как slow.next = slow.next.next
изменил значение resultHead
.