任务要求
利用Python编程语言创建一个链表结构,随后将链表中的元素按照与原顺序相反的方向进行输出。
任务分析
链表是一种线性数据结构,其中每个节点包含两部分:存储的数据(Data)和指向下一个节点的引用(Next)。单向链表的特点是只能从前往后遍历,不能反向访问。
反向输出链表的思路
- 栈数据结构:栈具有后进先出(LIFO)的特性,我们可以遍历链表,将每个节点的值依次压入栈中,然后再依次弹出栈中的元素,这样就能实现反向输出。
- 递归方法:递归的核心在于将大问题分解为小问题。对于链表的每个节点,先递归处理其后续节点,再输出当前节点的值,从而实现反向输出。
任务实现
方法一:使用栈数据结构
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_print_with_stack(head):
stack = []
current = head
# 遍历链表,将节点值压入栈中
while current:
stack.append(current.val)
current = current.next
# 依次弹出栈中的元素并输出
result = []
while stack:
result.append(stack.pop())
return result
# 创建链表 1 -> 2 -> 3
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
# 使用栈方法反向输出
print("反向输出:", reverse_print_with_stack(head))
说明:
- ListNode类用于表示链表中的节点。每个节点包含一个val属性用于存储节点的值,以及一个next属性用于指向下一个节点。
- 初始化栈:创建一个空栈stack用于存储链表节点的值。
- 遍历链表:使用while循环遍历链表,将每个节点的值依次压入栈中。
- 弹出栈元素:使用另一个while循环依次弹出栈中的元素,并将其添加到结果列表result中。
- 返回结果:返回结果列表result,即为链表的反向输出。
方法二:使用递归方法
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def reverse_print_recursive(head):
result = []
def helper(node):
if node:
# 先递归处理后续节点
helper(node.next)
# 再输出当前节点的值
result.append(node.val)
helper(head)
return result
# 创建链表 1 -> 2 -> 3
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
# 使用递归方法反向输出
print("反向输出:", reverse_print_recursive(head))
说明:
- 定义辅助函数:在reverse_print_recursive函数内部定义一个辅助函数helper,用于递归处理链表节点。
- 递归处理:在helper函数中,如果当前节点不为空,则先递归处理其后续节点,再将当前节点的值添加到结果列表result中。
- 调用辅助函数:调用helper函数处理链表的头节点。
- 返回结果:返回结果列表result,即为链表的反向输出。
运行结果
反向输出: [3, 2, 1]
进程已结束,退出代码为 0