bk2014111825
2021-07-21 11:27
采纳率: 71.4%
浏览 43

关于python链表中length方法的使用问题

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方法的代码可以提供下

  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • bk2014111825 2021-07-21 19:04
    已采纳

    关于length方法中next属性问题说明如下:
    如果链表没有节点,则执行length方法时,会走if current==None:,即不存在next问题
    如果有节点,势必是要调用append方法,append方法中有实例化Node类的操作:
    1、append方法中,用node实例化Node类。
    2、执行length方法时,用到了SingerLinkList初始化的self.head属性,此属性的形参正是node变量,该变量因为已经实例化了,所以可以直接使用Node类的next方法

    打赏 评论
  • bk2014111825 2021-07-21 11:34

    更正下代码片段:

     def length(self):
            current = self.head
            count = 0
            if current==None:
                return  count
            while current != None:
                count += 1
                current = current.next
            return count
    ```python
    
    
    
    

    ```

    打赏 评论
  • Feng-licong 2021-07-21 11:40
    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缩进不对

    打赏 评论
  • Feng-licong 2021-07-21 11:41
    node1 = Node("a")
    node2 = Node("b",node1)
    node3 = Node("c",node2)
    l1 = SingerLinkList(node3)
    print(l1.length())
    

    调用时应该是这样的

    打赏 评论

相关推荐 更多相似问题