Javascript изменение памяти объекта при реализации удаления узла в связанном списке

Собственно, это именно то, чего вы ожидаете. Давайте разложим, что здесь происходит:

Вы пишете

lst = [[1] * 4] * 3

Это эквивалентно:

lst1 = [1]*4
lst = [lst1]*3

Это означает, что lst - это список с 3 элемента, указывающие на lst1. Это означает, что две следующие строки эквивалентны:

lst[0][0] = 5
lst1[0] = 5

Поскольку lst[0] - это только lst1.

Чтобы получить желаемое поведение, вы можете использовать понимание списка:

lst = [ [1]*4 for n in xrange(3) ]

В этом случае выражение переоценивается для каждого n, что приводит к другому списку.

0
задан Ming Huang 24 March 2019 в 04:00
поделиться

1 ответ

Помните, JavaScript передает объекты по ссылке. resultHead.next = head означает изменение resultHead.next изменяет head внешне. Вы устанавливаете slow и fast на resultHead, поэтому изменение slow.next изменяет head.

, т.е.

slow === resultHead
resultHead.next === head
slow.next === head
0
ответ дан chris 24 March 2019 в 04:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: