实现一个斐波那契数列生成器&实现一个链表并进行反转

本文介绍了如何在Python中使用生成器函数实现斐波那契数列生成器以节省内存,并详细讲解了链表的构造与反转过程,包括ListNode类和reverse_list函数的实现。

1.实现一个斐波那契数列生成器

在Python中,你可以使用生成器函数来创建一个斐波那契数列生成器。生成器函数允许你按需生成值,而不是一次性生成所有值,这对于节省内存特别有用。以下是一个示例:

python复制代码

def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
# 使用生成器
for num in fibonacci(10):
print(num)

在这个例子中,fibonacci 是一个生成器函数,它使用 yield 关键字来逐个生成斐波那契数列的值。yield 会暂停函数的执行,直到下一次调用该函数时再继续执行。

当你调用 fibonacci(10) 时,这个函数会返回一个生成器对象。然后,你可以使用 for 循环来遍历这个生成器,每次迭代都会从生成器中获取一个值,直到生成器耗尽(在这个例子中是生成了前10个斐波那契数)。

注意,这个生成器函数是无限的,也就是说,它会一直生成斐波那契数列的值,直到你停止遍历它。在这个例子中,我们通过 range(n) 来限制生成的值的数量,但你可以根据需要修改这个逻辑。

2.实现一个链表并进行反转
 

链表是一种常见的数据结构,它由一系列节点组成,每个节点包含数据域和指向下一个节点的指针。反转链表就是将链表中节点的链接方向反转,使链表的尾节点变为头节点,头节点变为尾节点。

下面是一个简单的 Python 程序,实现了一个链表并进行反转:

python复制代码

class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def print_list(head):
current = head
while current:
print(current.val, end=" -> ")
current = current.next
print("None")
def reverse_list(head):
prev = None
current = head
while current:
next_node = current.next
current.next = prev
prev = current
current = next_node
return prev
# 创建一个链表:1 -> 2 -> 3 -> 4 -> 5
head = ListNode(1)
head.next = ListNode(2)
head.next.next = ListNode(3)
head.next.next.next = ListNode(4)
head.next.next.next.next = ListNode(5)
print("原始链表:")
print_list(head)
# 反转链表
new_head = reverse_list(head)
print("反转后的链表:")
print_list(new_head)

这个程序首先定义了一个 ListNode 类,表示链表的一个节点。然后定义了一个 print_list 函数,用于打印链表的内容。reverse_list 函数则是用于反转链表的,它使用三个指针(prevcurrent 和 next_node)来遍历链表并反转节点的链接方向。最后,我们创建了一个链表并打印其原始内容和反转后的内容。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值