我是一名菜鳥python程序員。我在下面看到了leetcode對鏈表的定義。我對這個概念有兩個問題,任何幫助將不勝感激。在此先感謝python linklist指針和大小
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
Q1只是不知道什麼是「self.next」,我知道在C++的類型,它應該是代表下一節點的地址的指針。但python沒有這種類型,所以我很困惑什麼類型的「下一個」。
Q2下面有人告訴我只是一個名字。如果是這樣的話,我運行下面的代碼,
head =ListNode(1)
print sys.getsizeof(head)
head.next = ListNode(2)
print sys.getsizeof(head)
第一head.next是「無」,然後將其分配給另一個ListNode類型, 但我之前得到頭的相同尺寸和在這個變化之後,我認爲head的大小應該更大,因爲它的一個成員(next)會從None類型更改爲ListNode類型。我對此感到困惑,非常感謝!
PS。根據我的理解,如果我不斷向鏈表添加新節點,由於越來越多'嵌套'成員'下一個',頭部會越來越大,只是指出我出錯的地方,謝謝。
它的python你可以分配幾乎任何東西,但它需要一個'Node'類型,它有一個'next'參數供列表工作。你最好爲list類創建一個'add'方法,而不是明確地添加到'.next'。你可以在那裏放入一個類型檢查,或者在python 3.5+中有一個類型的概念。無論如何,大小將保持不變,因爲實際節點只是一個值和對下一個節點的引用。如果您想知道有多少個節點,您需要遍歷列表以統計節點數量,或者在添加節點時保持計數。 –
感謝您的澄清,還有一個關於引用的問題,如果引用的大小沒有改變,爲什麼我們會有不同大小的引用int和list的引用,因爲在這種情況下它們都是引用他們所指的對象是不同的。 –
我不是100%肯定是誠實的。但我知道,儘管python中的所有內容都是參考。一個int值是一個不可變的引用,當它被賦值給(類似於在C++中傳遞值)時被複制,但像內建列表,字符串等的ListNode是一個可變引用,因此可以通過傳遞給它的函數(類似於C++中的非const引用)。這種語義差異可能會導致大小的差異。 [這](http://stackoverflow.com/questions/6158907/what-does-python-treat-as-reference-types)問題可能是有趣的。 –