Я задаю вопрос с кодом leetcode список с обратной связью .
Я попробовал следующий код и посмотрю, если я пропущу код в месте 1, он выдаст ошибку в результате. Я понимаю, что это потому, что он потерял ссылку на current.next
. (Спасибо за это сообщение stackoverflow .)
function ListNode(val) {
this.val = val;
this.next = null;
}
/**
* @param {ListNode} head
* @return {ListNode}
*/
var reverseList = function(head) {
let current = head;
let prev = null;
while (current) {
current.next = prev;
prev = current;
current = current.next;
//The right one
// let save = current.next; //1
// current.next = prev;
// prev = current;
// current = save;
}
return prev
};
Проблема в том, что я обнаружил, что другой код, показанный ниже, также работает с использованием назначения деструктурирования массива (может быть, имя правильно?), Но я не могу понять, почему это работает, не используя другую переменную для сохранения ссылки на current.next
.
var reverseList = function(head) {
let current = head;
let prev = null;
while (current) {
[current.next, prev, current] = [prev, current, current.next];//2
}
return prev
};
Так как же на самом деле работает код в месте 2 без использования другой переменной для сохранения ссылки на current.next
?