簡體   English   中英

Python function 鏈表調用,值調用/引用調用

[英]Python function calling on linked list, call by value/call by reference

下面是打印鏈表的代碼

 def printlinkedlist(root):
  if root==None:
    return
  print(root.data)
  printlinkedlist(root.next)

假設鏈表包含

1-2-3-4-5-6-7-8

通過調用 printlinkedlist(root) --------->它給出 put as----->1-2-3-4-5-6-7-8

現在,我打電話給另一個 function

def linkedlist2(root):
  if root==None:
    return
  print(root.data)
  if root.next==None:
    root.data=50
    return
  linkedlist2(root.next)

這基本上使最后一個元素值為 50。當我調用 function printlinkedlist(root)時,它產生1-2-3-4-5-6-7-50

疑惑一:由於原始根中的值改變了,根是值傳遞還是引用傳遞?

如果是這樣,希望它通過引用傳遞

def linkedlist3(root):
  if root==None:
    return
  print(root.data)
  if root.next==None:
    root=None
    return
  linkedlist3(root.next)

這基本上使最后一個節點為 None.ie, 1-2-3-4-5-6-7-50 output 應該像1-2-3-4-5-6-7 (因為 50 被制作為無)調用linkedlist(root)時。 這不是發生的事情。 它產生與之前相同的 output,即1-2-3-4-5-6-7-50

有人可以解釋為什么我想要的 output 沒有生產,以及它是按值調用還是按引用調用???。

它是按值傳遞的引用(即類似於在 C 中傳遞指針)。

當您設置root.next時,您正在更改root所指節點的next的值,因此該節點的列表會發生變化。 當您設置root本身時,您只是在修改傳入的引用,而不是它所引用的基礎值,因此列表不受影響。

如果要刪除鏈表的最后一個節點,則需要將倒數第二個節點的next設置為None 就像是:

def pop_last(root):
    if root is None or root.next is None:
        raise IndexError("can't pop from list with len < 2")
    if root.next.next is None:
        val = root.next.data
        root.next = None
        return val
    return pop_last(root.next)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM