below is the code for print a linked list
def printlinkedlist(root):
if root==None:
return
print(root.data)
printlinkedlist(root.next)
Suppose the linked list contain
1-2-3-4-5-6-7-8
by calling printlinkedlist(root) --------->it give out put as------>1-2-3-4-5-6-7-8
Now, i call another function
def linkedlist2(root):
if root==None:
return
print(root.data)
if root.next==None:
root.data=50
return
linkedlist2(root.next)
Which basically make the last element value as 50.
when i called the function printlinkedlist(root) it produce 1-2-3-4-5-6-7-50
doubt 1: since the value changed in orginal root, whether the root is passed by value or passed by reference?
Let hope it is passed by reference, if so
def linkedlist3(root):
if root==None:
return
print(root.data)
if root.next==None:
root=None
return
linkedlist3(root.next)
which basically make the last node as None.ie, the 1-2-3-4-5-6-7-50 output should be like 1-2-3-4-5-6-7 (since 50 is maked as None) when call linkedlist(root). this is not what happend. it produce the same previous output, which is 1-2-3-4-5-6-7-50.
Can some one please explain why my desired output not produced and whether it is happening as call by value or call by reference???.
It is a reference that is passed by value (i.e. it's similar to passing a pointer in C).
When you set
root.nextyou are changing the value ofnextfor the node thatrootrefers to, and so the list changes at that node. When you setrootitself, you are only modifying the reference that was passed in, not the underlying value that it refers to, and so the list is unaffected.If you want to remove the last node of a linked list, you need to set the
nextof the second-to-last node toNone. Something like: