如何用单个递归函数实现链表反转与递归打印?
单个递归函数实现链表的递归打印
你可以通过给递归打印函数设置默认参数,将原本两个函数的逻辑合并到单个递归函数中。另外注意原代码里的helper_print存在变量错误:打印时误用了未定义的temp,应该改为current。
修改后的递归打印函数
直接替换原LinkedList类中的recursive_print和helper_print函数:
def recursive_print(self, current=None): # 首次调用自动传入链表头节点 if current is None: current = self.head # 递归终止条件:当前节点为空 if current is None: return print(f"{current.data} -> ", end=' ') # 递归调用,传入下一个节点 self.recursive_print(current.next)
完整代码示例
class Node: def __init__(self, data): self.data = data self.next = None class LinkedList: def __init__(self): self.head = None def reverse_Util(self, curr, prev): if curr.next is None: self.head = curr curr.next = prev return next_node = curr.next curr.next = prev self.reverse_Util(next_node, curr) def reverse(self): if self.head is None: return self.reverse_Util(self.head, None) def push(self, new_data): new_node = Node(new_data) new_node.next = self.head self.head = new_node def printL(self): temp = self.head while(temp): print(str(temp.data) + " -> ", end=' ') temp = temp.next # 单个递归打印函数 def recursive_print(self, current=None): if current is None: current = self.head if current is None: return print(f"{current.data} -> ", end=' ') self.recursive_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.recursive_print()
逻辑说明
- 首次调用
recursive_print()时,current默认值为None,函数会自动将self.head赋值给current,开启递归遍历。 - 每次递归调用时,传入当前节点的
next指针,直到current为None时触发终止条件,结束递归。
内容的提问来源于stack exchange,提问作者M. Onur
相关产品推荐
相关产品推荐

