Python variable references

Question:

New to Python and picking up some practice on DSA problems though I have previously only worked in Java. Why does option 2 work and option 1 does not? I have seen Python passes by object reference and suspect the answer is to do with using references of references.

Option 1

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
        current = head
        fastp = current
        slowp = current

        while (current and current.next):
            fastp = fastp.next.next
            slowp = slowp.next
            current = current.next                 
        return slowp

Option 2

# Definition for singly-linked list.
# class ListNode:
#     def __init__(self, val=0, next=None):
#         self.val = val
#         self.next = next

class Solution:
    def middleNode(self, head: Optional[ListNode]) -> Optional[ListNode]:
        fastp = head
        slowp = head

        while (fastp and fastp.next):
            fastp = fastp.next.next
            slowp = slowp.next                    
        return slowp

Shown 2 example solutions above, one working and one incorrect but unsure why.

Asked By: Siggyweb

||

Answers:

In option 1, current is a reference that does not change in the loop.

Actually, it is not clear which line of the loop (assignment to fastp or assignment to slowp) was expected to change current.
Maybe something else was meant, and option 1 is just buggy?

Answered By: Gassa
Categories: questions Tags: ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.