I was practicing some algorithms, and I once saw this code
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
class Solution:
def addTwoNumbers(self, l1: Optional[ListNode], l2: Optional[ListNode]) -> Optional[ListNode]:
q = 0
head = new_LN = ListNode(0)
while l1 or l2:
l1_val = l1.val if l1 else 0
l2_val = l2.val if l2 else 0
q, r = divmod(q + l1_val + l2_val , 10)
new_LN.next = ListNode(r)
new_LN = new_LN.next
l1 = l1.next if l1 else None
l2 = l2.next if l2 else None
if q:
new_LN.next = ListNode(q)
return head.next
# print(new_LN) # ListNode{val: 8, next: None}
# print(head) # ListNode{val: 0, next: ListNode{val: 7, next: ListNode{val: 0, next: ListNode{val: 8, next: None}}}}
In an example, the results of new_LN and head are stated above.
I cannot understand why head and new_LN are different though they were declared on the same line.
Can anybody explain this one for me?