程序员文章、书籍推荐和程序员创业信息与资源分享平台

网站首页 > 技术文章 正文

Python创建链表并反向输出(python写链表)

hfteth 2025-04-05 18:51:31 技术文章 16 ℃


任务要求

利用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

Tags:

最近发表
标签列表