我有这个链表的实现
class Node:
def __init__(self, data, next=None):
self.data = data
self.next = next
class Linked_list:
def __init__(self, llist=None):
self.head = None
self.tail = None
if llist is not None:
for i in llist:
self.append(i)
def add_head(self, data):
self.head = Node(data, self.head)
if self.tail is None:
self.tail = self.head
def append(self, data):
if self.head is None:
self.add_head(data)
else:
self.tail.next = Node(data)
self.tail = self.tail.next
我想更改__init__()
,因此如果llist
参数包含iterable元素(list、range()、string、tuple等),它将从中构造一个新的链接列表。我相信递归是可行的,但是我真的很困惑如何在__init__()
中实现它。例如
a = Linked_list([1, 2, Linked_list(range(5)), Linked_list(range(3))])
b = Linked_list([1, 2, list(range(5)), list(range(3))])
c = Linked_list([1, 2, (0, 1, 2, 3, 4), (0, 1, 2)])
a、b、c应返回相同的链接列表
您可以使用
isinstance()
来检查llist
中值的类型,并相应地执行操作。递归基本上是免费的,通过构造函数实现的。你知道吗输出:
要测试某个内容是否可iterable,可以使用
collection.abc
模块中的abstract base class:请注意,Python为iterable objects定义了一个行为/协议,这可能不是您练习的目的,但是您可能会对遵守它感兴趣。你知道吗
相关问题 更多 >
编程相关推荐