【问题标题】:Basic concept: how to define a linked list in python?基本概念:如何在python中定义一个链表?
【发布时间】:2020-09-28 14:21:13
【问题描述】:

我知道链表的定义...每个单元都有数据并指向下一个...但是它在python中是如何实现的?我真的很困惑……

例如与python中的list比较, 如果我想创建一个列表:

l1 = [1, 2, 3]

如果我想在这个列表中添加元素,只需使用append()insert() 就很容易了

但是,很多资料说如果你想制作一个像这样的链表,就需要创建一个类:

class ListNode:
    def __init__(self, data):
        self.data = data
        self.next = None
        return

    def has_value(self, value):
        if self.data == value:
            return True
        else:
            return False
node1 = ListNode(2)
node2 = ListNode(1.2)
node3 = ListNode('a')

我想知道是否有某种方法可以使它更容易,例如:

(1.2) = (2).next
 ('a') = (1.2).next

另外,我找到了一些类似.val .next .head的方法,什么时候可以使用?

【问题讨论】:

  • ListNode 表示列表中的 节点,而不是列表本身。应该有一个 List 类,其中包含对头节点的引用,并定义了通过遵循头节点的引用来操作列表的方法。
  • 例如,l = List(); l.append(1); l.append(1.2); l.append('a')l.head.data 可以参考2l.head.next.data 可以参考1.2l.head.next.next.data 可以参考'a'

标签: python-3.x linked-list


【解决方案1】:

您将 Python 列表与链表混淆了。它们是不相同的。您首先提到的是 Python 列表。您在 Class 中提到的那个是 Linked List。


列表

  • Python 列表只是动态数组。
  • 数组的元素存储在连续的位置。
  • 列表是动态数组,这意味着它们的大小不是固定的,而是 变量,可以根据需要扩展或收缩。
  • 时间复杂度:插入:O(n),删除:O(n),访问 元素:O(1)

链接列表:

  • 而链表是一种完全不同的数据结构,其中 元素不存储在连续的位置,而是链接到 彼此。
  • 这里每个元素都有一个指向列表中下一个元素的链接。为了 列表的最后一个元素,它指向 NULL。
  • 时间复杂度:插入:O(1),删除:O(1),访问 元素:O(n)

有关链表的更多信息,请参阅this

如果您有任何疑问,请随时发表评论。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-19
    • 1970-01-01
    • 1970-01-01
    • 2019-11-06
    相关资源
    最近更新 更多