b站视频学习,代码如下:
class Node(object):
def __init__(self, elem, next=None):
self.elem = elem
self.next = next
class SingerLinkList(object):
def __init__(self, node=None):
self.head = node
def length(self):
current = self.head
count = 1
while current != None:
count += 1
current = current.next
return count
if __name__ == "__main__":
l1 = SingerLinkList()
print(l1.length())
问题现象:和up主相同的代码片段,我这边返回结果不一致。
问题:
为什么SingerLinkList类中的length方法中的current可以直接使用 Node类中的next属性?
在SingerLinkList没有继承Node类或是在length方法中没有实例化 Node类,就直接使用 current.next?
或是有什么其他方法可以解决这个问题,有正确的length方法的代码可以提供下
关于length方法中next属性问题说明如下:
如果链表没有节点,则执行length方法时,会走if current==None:,即不存在next问题
如果有节点,势必是要调用append方法,append方法中有实例化Node类的操作:
1、append方法中,用node实例化Node类。
2、执行length方法时,用到了SingerLinkList初始化的self.head属性,此属性的形参正是node变量,该变量因为已经实例化了,所以可以直接使用Node类的next方法
更正下代码片段:
def length(self):
current = self.head
count = 0
if current==None:
return count
while current != None:
count += 1
current = current.next
return count
```python
```
class Node(object):
def __init__(self, elem, next=None):
self.elem = elem
self.next = next
class SingerLinkList(object):
def __init__(self, node=None):
self.head = node
def length(self):
current = self.head
count = 1
while current != None:
count += 1
current = current.next
return count
if __name__ == "__main__":
l1 = SingerLinkList()
print(l1.length())
你上面的return缩进不对
node1 = Node("a")
node2 = Node("b",node1)
node3 = Node("c",node2)
l1 = SingerLinkList(node3)
print(l1.length())
调用时应该是这样的