Python 将列表转换为链接列表
我正在尝试将列表转换为链表。 我已经有了一个链接类,但我正在尝试找出如何将列表转换为链接列表,例如:Python 将列表转换为链接列表,python,list,linked-list,Python,List,Linked List,我正在尝试将列表转换为链表。 我已经有了一个链接类,但我正在尝试找出如何将列表转换为链接列表,例如: def list_to_link(lst): """Takes a Python list and returns a Link with the same elements. >>> link = list_to_link([1, 2, 3]) >>> print_link(link) <1 2 3> "
def list_to_link(lst):
"""Takes a Python list and returns a Link with the same elements.
>>> link = list_to_link([1, 2, 3])
>>> print_link(link)
<1 2 3>
"""
class Link:
empty = ()
def __init__(self, first, rest=empty):
assert rest is Link.empty or isinstance(rest, Link)
self.first = first
self.rest = rest
def print_link(link):
"""Print elements of a linked list link."""
>>> link = Link(1, Link(2, Link(3)))
>>> print_link(link)
<1 2 3>
>>> link1 = Link(1, Link(Link(2), Link(3)))
>>> print_link(link1)
<1 <2> 3>
>>> link1 = Link(3, Link(Link(4), Link(5, Link(6))))
>>> print_link(link1)
<3 <4> 5 6>
"""
print('<' +helper(link).rstrip() +'>')
def列表到链接(lst):
“”“获取Python列表并返回具有相同元素的链接。
>>>链接=列表到链接([1,2,3])
>>>打印链接(链接)
"""
类链接:
空=()
定义初始化(self,first,rest=empty):
断言rest为Link.empty或isinstance(rest,Link)
self.first=第一
self.rest=休息
def打印链接(链接):
“”“打印链接列表链接的元素。”“”
>>>链路=链路(1,链路(2,链路(3)))
>>>打印链接(链接)
>>>链接1=链接(1,链接(链接(2),链接(3)))
>>>打印链接(链接1)
>>>链接1=链接(3,链接(链接(4),链接(5,链接(6)))
>>>打印链接(链接1)
"""
打印(“”)
这就是你想要的
class Node(object):
def __init__(self, value, next=None):
self.value = value
self.reference = next
class LinkedList(object):
def __init__(self, sequence):
self.head = Node(sequence[0])
current = self.head
for item in sequence[1:]:
current.reference = Node(item)
current = current.reference
a = range(10)
li = LinkedList(li)
current = li.head
while current is not None:
print current.value
current = current.reference
Matt的答案是好的,但它超出了上述问题中描述的功能原型的约束 阅读摘要/原型,问题的创建者似乎想用递归/动态编程方法解决这个问题。这是一个非常标准的递归算法介绍。它更多的是了解如何编写优雅的递归代码,而不是用Python创建链表(不是真正有用或常见的) 我想出了一个解决方案。试试看:
class Link:
empty = ()
def __init__(self, first, rest=empty):
assert rest is Link.empty or isinstance(rest, Link)
self.first = first
self.rest = rest
def print_link(link):
"""Print elements of a linked list link.
"""
print('<' + helper(link).rstrip() +'>')
def list_to_link(lst):
"""Takes a Python list and returns a Link with the same elements.
"""
if len(lst) == 1:
return Link(lst[0])
return Link(lst[0], list_to_link(lst[1:])) # <<<< RECURSIVE
def helper(link):
if isinstance(link.first, Link):
first = '<' + helper(link.first).rstrip() + '>' # <<<< RECURSIVE
else:
first = str(link.first)
if link.rest != Link.empty:
return first + ' ' + helper(link.rest) # <<<< RECURSIVE
else:
return first + ' '
def main():
""" Below are taken from sample in function prototype comments
"""
link = list_to_link([1, 2, 3])
print_link(link)
link = Link(1, Link(2, Link(3)))
print_link(link)
link1 = Link(1, Link(Link(2), Link(3)))
print_link(link1)
link1 = Link(3, Link(Link(4), Link(5, Link(6))))
print_link(link1)
if __name__ == '__main__':
main()
类链接:
空=()
定义初始化(self,first,rest=empty):
断言rest为Link.empty或isinstance(rest,Link)
self.first=第一
self.rest=休息
def打印链接(链接):
“”“打印链接列表链接的元素。”。
"""
打印(“”)
def列表到链接(lst):
“”“获取Python列表并返回具有相同元素的链接。
"""
如果len(lst)==1:
返回链接(lst[0])
返回链接(lst[0],列表到链接(lst[1:])#我想到了使用伪ListNode。这使得代码简单而整洁
类列表节点:
定义初始化(self,x):
self.val=x
self.next=无
def LST2链路(lst):
cur=dummy=ListNode(0)
对于lst中的e:
cur.next=ListNode(e)
cur=cur.next
return dummy.next
为什么需要链表?它提供什么样的功能?(std列表尚未提供)这只是一个作业练习。我猜他们想让我们把链表看作一个可变函数,但我不知道如何处理这个问题。这可能会有帮助,谢谢!我来看看,我认为这与链表不太一样。你已经将所有的链接
嵌套到一个链接中了好的,谢谢,我还没有了解节点,所以我还不太懂代码,但是谢谢你的输入!@d'change节点是一个容器,有一个值
,还有一个指向下一个节点的指针,也就是引用
。试着运行代码,你会看到它将Python列表转换成链接列表
。看起来像是但是你改变了你的问题。哦,是的,抱歉@Matt。我做了。我知道了前一个问题是怎么回事,如果不清楚的话,我很抱歉。我会把它改回去以适应你的答案