这是如何打印反向链表的

时间:2016-12-15 20:56:27

标签: python list linked-list

这段代码如何打印链接列表?我很好奇新列表是如何形成这种方式的。

class Empty:
    def __init__ (self):
        self.IsEmpty = True
Empty = Empty()

class Node:
    def __init__ (self,value,tail):
        self.IsEmpty = False
        self.value = value
        self.tail = tail

l = Node(1,Node(2,Node(3,Node(4,Empty))))   


c = l
nl = Empty

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

while not nl.IsEmpty:
    print(nl.value)
    nl = nl.tail

3 个答案:

答案 0 :(得分:0)

它没有打印反转,nl 内置反转:

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

每个新的nl都是下一个的尾部。因此1是2的尾部,依此类推。

答案 1 :(得分:0)

考虑第一个while循环中发生的事情。它反过来构建一个新列表。我们从Empty开始。然后每次迭代:

new_list = Node(l.current_value, Node(l.previous_value))

其中previous_value是迭代原始列表时首先遇到的值。所以,这可以扩展到:

Node(l.last_value, Node(l.second_to_last, Node(...Node(l.first_value, Empty)...)))

答案 2 :(得分:0)

它构建了一个转发列表

l = Node(1,Node(2,Node(3,Node(4,Empty))))   

然后从该转发列表构建一个向后列表

nl = Empty

while not l.IsEmpty:
    nl = Node(l.value,nl)
    l = l.tail

然后按顺序打印出列表,这与第一个列表相反。

这是一种非常复杂的做事方式。更好的是递归的东西,比如:

def printer(curr):
    if curr.isEmpty:
        return
    printer(curr.tail)
    print(curr.value)