在 python 中使用链表最简单的方法是什么?在方案中,链表由 简单定义'(1 2 3 4 5)。Python 的列表[1, 2, 3, 4, 5]和元组(1, 2, 3, 4, 5)实际上不是链表,链表有一些很好的属性,例如常量时间连接,并且能够引用它们的不同部分。使它们不可变,它们真的很容易使用!
'(1 2 3 4 5)
[1, 2, 3, 4, 5]
(1, 2, 3, 4, 5)
以下是一些基于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
w = sys.stdout.write
虽然双链表在 Raymond Hettinger 的有序集合配方中使用得很有名,但单链表在 Python 中没有实际价值。
除了教育之外,我 从未 在 Python 中使用单链表来解决任何问题。
Thomas Watnedal提出了一个很好的教育资源How to Think Like a Computer Scientist,第 17 章:链接列表:
链表是:
一个包含货物对象和对链表的引用的节点。
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”)