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。我做了。我知道了前一个问题是怎么回事,如果不清楚的话,我很抱歉。我会把它改回去以适应你的答案