如何使用python自动链接链表的值
我已经开始使用python学习数据结构。我从昨天起就一直坚持这个问题,还没有想到解决办法。我在internet上看到的教程手动链接链接列表的值。我一直在寻找和思考是否有一种方法可以自动完成。 下面是tutorialspoint.com上的示例代码如何使用python自动链接链表的值,python,data-structures,Python,Data Structures,我已经开始使用python学习数据结构。我从昨天起就一直坚持这个问题,还没有想到解决办法。我在internet上看到的教程手动链接链接列表的值。我一直在寻找和思考是否有一种方法可以自动完成。 下面是tutorialspoint.com上的示例代码 class Node: def __init__(self, dataval=None): self.dataval = dataval self.nextval = None class SLinkedLis
class Node:
def __init__(self, dataval=None):
self.dataval = dataval
self.nextval = None
class SLinkedList:
def __init__(self):
self.headval = None
def listprint(self):
printval = self.headval
while printval is not None:
print (printval.dataval)
printval = printval.nextval
list = SLinkedList()
list.headval = Node("Mon")
e2 = Node("Tue")
e3 = Node("Wed")
# Link first Node to second node
list.headval.nextval = e2
# Link second Node to third node
e2.nextval = e3
list.listprint()
正如@Reut Sharabani在评论中所说,节点构造函数只接受dataval,并将下一个值设置为None。要获得所需的行为,必须在节点旁边创建第二个构造函数,在其中指定dataval。然后,在SLinkedList类中,从尾部节点开始,向头部移动,反向构造链表。
如果这就是您所说的自动。当然,这里有一种方法可以做到这一点,而不会中断当前的设置 你的课程太多了:
class Node:
def __init__(self, data=None):
self.data = data
self.next_node = None
@classmethod
def from_iterable(cls, iterable):
node = cls()
iterable = iter(iterable)
try:
node.data = next(iterable)
except StopIteration:
return None
node.next_node = cls.from_iterable(iterable)
return node
class SLinkedList:
def __init__(self, head_node=None):
self.head_node = head_node
@classmethod
def from_iterable(cls, iterable):
return cls(Node.from_iterable(iterable))
def listprint(self):
print_node = self.head_node
while print_node is not None:
print(print_node.data)
print_node = print_node.next_node
my_list = SLinkedList.from_iterable(["Mon", "Tue", "Wed"])
my_list.listprint()
有输出
Mon
Tue
Wed
我在这里重命名了一些位(记住list
是Python内置的!),并且
然后,将一些函数签名更改为更自然一些,但是
我刚才所做的主要是添加了两个来自iterable的方法
这是一个非常递归的实现。如果您需要比大约大的列表
1000个元素,您必须以while循环的形式编写它们(尽管
在纯Python中这样的链表实现永远不会很快)当然可以将元素添加到链表中。您可以在第一个位置(普通)或现有节点之后插入元素(稍微复杂一些,因为您必须指定如何指定该节点)
你可以。但是您必须向构造函数传递一个节点,使其链接到某个对象。目前,节点只接收自己的数据(dataval),因此它只知道这些数据。
...
class SLinkedList:
def __init__(self):
self.headval = None
def listprint(self):
printval = self.headval
while printval is not None:
print (printval.dataval)
printval = printval.nextval
def insertfirst(self, val):
node = Node(val)
node.nextval = self.headval
self.headval = node
>>> lst = SLinkedList() # do not use list which is the standard library list
>>> lst.insertfirst("Wed")
>>> lst.insertfirst("Tue")
>>> lst.insertfirst("Mon")
>>> lst.listprint()
Mon
Tue
Wed