如何实现一个高效的单向链表逆序输出

105 阅读1分钟

要实现一个高效的单向链表逆序输出,可以使用递归方法或栈来存储节点值。下面是两种方法的详细说明和代码示例:

方法一:使用递归

递归方法利用了函数调用栈的特性,自然地实现了逆序输出。递归的基本思想是先处理下一个节点,再处理当前节点。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def print_list_reverse(head):
    if head is not None:
        print_list_reverse(head.next)
        print(head.val)

# 示例用法
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
print_list_reverse(head)  # 输出: 4 3 2 1

方法二:使用栈

使用栈可以显式地存储节点值,然后在需要时逆序输出。这种方法避免了递归带来的栈溢出问题,适用于非常长的链表。

class ListNode:
    def __init__(self, val=0, next=None):
        self.val = val
        self.next = next

def print_list_reverse(head):
    stack = []
    while head is not None:
        stack.append(head.val)
        head = head.next
    
    while stack:
        print(stack.pop())

# 示例用法
head = ListNode(1, ListNode(2, ListNode(3, ListNode(4))))
print_list_reverse(head)  # 输出: 4 3 2 1

总结

  • 递归方法:简洁但可能会导致栈溢出,适用于链表长度较短的情况。
  • 栈方法:更安全,适用于任意长度的链表,但需要额外的存储空间。