小编典典

Python 链表

all

在 python 中使用链表最简单的方法是什么?在方案中,链表由 简单定义'(1 2 3 4 5)。Python 的列表[1, 2, 3, 4, 5]和元组(1, 2, 3, 4, 5)实际上不是链表,链表有一些很好的属性,例如常量时间连接,并且能够引用它们的不同部分。使它们不可变,它们真的很容易使用!


阅读 72

收藏
2022-07-30

共1个答案

小编典典

以下是一些基于Martin v. Løwis陈述的列表函数:

cons   = lambda el, lst: (el, lst)
mklist = lambda *args: reduce(lambda lst, el: cons(el, lst), reversed(args), None)
car = lambda lst: lst[0] if lst else lst
cdr = lambda lst: lst[1] if lst else lst
nth = lambda n, lst: nth(n-1, cdr(lst)) if n > 0 else car(lst)
length  = lambda lst, count=0: length(cdr(lst), count+1) if lst else count
begin   = lambda *args: args[-1]
display = lambda lst: begin(w("%s " % car(lst)), display(cdr(lst))) if lst else w("nil\n")

在哪里w = sys.stdout.write

虽然双链表在 Raymond Hettinger
有序集合配方中使用得很有名,但单链表在
Python 中没有实际价值。

除了教育之外,我 从未 在 Python 中使用单链表来解决任何问题。

Thomas Watnedal提出了一个很好的教育资源How to Think Like a Computer Scientist,第 17
章:链接列表

链表是:

  • 空列表,由 None 表示,或
  • 一个包含货物对象和对链表的引用的节点。

    class Node:
    

    def init(self, cargo=None, next=None):
    self.car = cargo
    self.cdr = next
    def str(self):
    return str(self.car)

    def display(lst):
    if lst:
    w(“%s ” % lst)
    display(lst.cdr)
    else:
    w(“nil\n”)

2022-07-30