Python 递归反向链表
我对Python中递归反转链表的算法有一个问题Python 递归反向链表,python,algorithm,linked-list,Python,Algorithm,Linked List,我对Python中递归反转链表的算法有一个问题 def reverse(lis, prev = None): if lis.next != None: reverse(lis.next, lis) lis.next = prev 投入:3 1 4 产出:3 知道它为什么不工作吗?问题是链表的根也发生了变化:在改变链表后,元素3实际上是最后一个元素,函数最好也返回根: def reverse(lis, prev = None): if lis.next !
def reverse(lis, prev = None):
if lis.next != None:
reverse(lis.next, lis)
lis.next = prev
投入:3 1 4
产出:3
知道它为什么不工作吗?问题是链表的根也发生了变化:在改变链表后,元素3实际上是最后一个元素,函数最好也返回根:
def reverse(lis, prev = None):
if lis.next != None:
temp = lis.next
lis.next = prev
return reverse(temp, lis)
else:
return lis # the new root
因此,现在您将其称为:
oldroot = ... #construct linked list
newroot = reverse(oldroot)
print(newroot)
因此,您的函数是正确的,但在操作后,您手中的链表元素是错误的。这看起来像是一些函数编程练习,因此我向您提供了一个函数解决方案,它复制了列表:
def reverse(link, rest=None):
if link is None:
return rest
return reverse(link.next, LinkedList(link.value, rest))
class LinkedList:
def __init__(self, value=None, next=None):
self.next = next
self.value = value
def print(self):
print(self.value)
if self.next is not None:
self.next.print()
def to_linked_list(items):
if len(items) == 0:
return None
return LinkedList(items[0], to_linked_list(items[1:]))
to_linked_list([1, 2, 3, 4, 5]).print()
# 1, 2, 3, 4, 5
reverse(to_linked_list([1, 2, 3, 4, 5])).print()
# 5, 4, 3, 2, 1
就地而不是创建新链:
def reverse_linked_list(node, prev=None):
if node.next is None:
node.next = prev
return node
root_node = reverse_linked_list(node.next, node)
node.next = prev
return root_node
@Rasmiranjanayak这个问题肯定不属于codereview,因为它不起作用,问题不是询问关于如何改进代码的一般建议,而是如何修复故障。很高兴提供一个功能解决方案。我给出的一个建议是重写_str__函数,而不是使用.print方法。但是+1!