Важным моментом здесь является то, что когда вы устанавливаете переменную Python для объекта, это указатель, а не значение. Таким образом, в этом коде здесь:
dummy = cur = ListNode(0)
# cur = 0
# dummy = 0
dummy
и cur
оба указывают на один и тот же объект (то есть на один и тот же одноэлементный список). Когда вы добавляете другой список к cur
, вы одновременно добавляете его к dummy
, потому что это тот же список.
Когда вы делаете это:
cur = cur.next
# cur = 1->4->5
# dummy = 0->1->4->5
выне создавая новый список, вы просто перемещаете указатель cur
по существующему списку. Оба указателя являются частью одного и того же списка, но dummy
указывает на первый элемент, а cur
указывает на второй элемент.
Каждый раз, когда вы вызываете ListNode()
, вы создаете новый узел, поэтомуесли вы хотите создать два узла с одинаковым значением, вам нужно вызвать инициализатор дважды:
dummy = ListNode(0)
cur = ListNode(0)
# cur and dummy both have values of 0, but they're different list objects!
Кроме того: я не уверен, что это то, что вы получили, когда упомянули«фиктивные узлы», но обратите внимание, что нет особой необходимости в специальном «фиктивном узле» в вашем списке, чтобы обозначить конец списка;None
отлично подходит для этой цели (т. Е. Конец списка - это тот, чей next is None
).