我正在研究一个不销毁的反向打印链表的问题。我的具体问题是
O(n)
使用递归调用堆栈顺便说一句:如果我现在的代码有什么问题,比如逻辑错误,请随时提出建议。你知道吗
class LinkedListNode:
def __init__(self, value, nextNode):
self.value = value
self.nextNode = nextNode
def print_reverse(self):
if not self.nextNode:
print self.value
return
else:
self.nextNode.print_reverse()
print self.value
if __name__ == "__main__":
head = LinkedListNode('a', LinkedListNode('b', LinkedListNode('c', LinkedListNode('d', None))))
head.print_reverse()
如果您的
LinkedListNode
不是不变的,并且您只关心链表的最终结构,那么您可以在一次迭代中反转链表,并打印元素,同时在另一次迭代中从末尾重新反转它;这会给您Ө(1)
空间复杂度和Ө(n)
时间复杂度。你知道吗否则,如果不允许您在任何时候更改任何结构,我认为
Ө(n)
空间是您能得到的最好的空间。你知道吗下面是一个Java实现:
使用O(n)空格反向打印列表不是很好,特别是如果这是堆栈空间。你知道吗
如果不能修改列表,则可以在O(logn)空间和O(nlogn)时间中进行修改,如下所示:
您的
print_reverse()
可以简化为:我不知道你怎么能改进这个,你需要一堆描述,因为这个列表不是双重链接的。但是您可以使用自己的堆栈,这样可以避免递归溢出的风险:
相关问题 更多 >
编程相关推荐