如何用一个函数编写这个递归函数

问题描述 投票:0回答:1

我的代码如下,我尝试使用递归函数反转链表并递归打印它。我只想编写一个递归函数来遍历链表,而不是使用 recursive_printhelper_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()
python function oop recursion linked-list
1个回答
0
投票

您只需使用一种方法即可实现此目的:您可以允许使用 可选 参数来指示您当前在列表中的位置,以及

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()
© www.soinside.com 2019 - 2024. All rights reserved.