我的代码如下,我尝试使用递归函数反转链表并递归打印它。我只想编写一个递归函数来遍历链表,而不是使用 recursive_print 和 helper_print。我该如何编写这个递归代码?
链表实现及功能如下:
class Node:
# Constructor
def __init__(self, data):
self.data = data
self.next = None
class LinkedList:
# head function
def __init__(self):
self.head = None
def reverse_Util(self, curr, prev):
# If last node mark it head
if curr.next is None:
self.head = curr
curr.next = prev
return
# Save curr.next node for recursive call
next = curr.next
# update next
curr.next = prev
self.reverse_Util(next, curr)
# This function calls reverse_Util()
# with previous as Null
def reverse(self):
if self.head is None:
return
self.reverse_Util(self.head, None)
# To insert the new node at the beginning of the list
def push(self, new_data):
new_node = Node(new_data)
new_node.next = self.head
self.head = new_node
# To print the list
def printL(self):
temp = self.head
while(temp):
print(str(temp.data) + " -> ",end=' ')
temp = temp.next
def recursive_print(self):
self.helper_print(self.head)
def helper_print(self,current):
if current == None:
return
print(str(current.data) + " ->",end=' ')
self.helper_print(current.next)
# Main function
llist = LinkedList()
llist.push(1)
llist.push(2)
llist.push(3)
llist.push(4)
print ("Given linked list")
llist.printL()
llist.reverse()
print ("\nReverse linked list")
#llist.printL()
llist.recursive_print()
您只需使用一种方法即可实现此目的:您可以允许使用 可选 参数来指示您当前在列表中的位置,以及
None
指示您位于开始位置。此方法可用于 reverse
和 recursive_print
方法:
def reverse(self, prev=None):
current = prev.next if prev else self.head
if current:
self.reverse(current)
current.next = prev
else:
self.head = prev
def recursive_print(self, prev=None):
current = prev.next if prev else self.head
if current:
if prev:
print(" -> ", end="")
print(current.data, end="")
self.recursive_print(current)
else:
print()