我是一名新手python程序员。我在下面看到了leetcode对链表的定义。我对这个概念有两个问题,任何帮助都将不胜感激。提前致谢
# Definition for singly-linked list.
# class ListNode(object):
# def __init__(self, x):
# self.val = x
# self.next = None
Q1只是想知道“self.next”的类型是什么,我知道在C ++中,它应该是一个表示下一个节点地址的指针。但是python没有那种类型,所以我很困惑“next”是什么类型。
Q2有些人告诉我接下来只是一个名字。如果是这种情况,我运行下面的代码,
head =ListNode(1)
print sys.getsizeof(head)
head.next = ListNode(2)
print sys.getsizeof(head)
首先head.next为'None',然后将其分配给另一个ListNode类型, 但是我在这个改变之前和之后得到了相同大小的头部,我认为头部的大小应该更大,因为它的一个成员(下一个)从None类型改为ListNode类型。我对此感到困惑,非常感谢你!
PS。根据我的理解,如果我不断向链接列表中添加新节点,那么头部会越来越大,因为越来越多的“嵌套”成员“接下来”,只需指出我出错的地方,谢谢。
答案 0 :(得分:0)
问题1:
Python变量是动态类型的。 (即一个变量可以包含一个int,然后保存一个列表,然后保存任何其他任意对象等)。
在您的情况下,AJAX
首先引用1000
Head.next
个对象。
为其分配不同的值(None
)后,NoneType
现在引用新创建的ListNode(2)
对象。
问题2:
为什么尺寸不会改变。
我不是python的Head.next
如何工作的专家,但从我可以收集到的,两种情况下的List.next是一个引用变量(即引用其他对象的变量)。大小不会改变,因为ListNode
找到对象变量的大小。其中sys.getsizeof
只是对两种情况下其他对象的引用。
有关sys.getsizeof
如何运作的更完整答案,请参阅How do I determine the size of an object in Python?。
答案 1 :(得分:0)
我对链表的解释。
Head.next