Python程序:不使用递归打印链表的交替节点
在使用Python编写程序时,经常需要操作链表。通常,我们会使用递归来遍历链表并输出交替节点。然而,递归的实现方式很容易导致 stack overflow,并且效率不高。本文将介绍一种不使用递归的方式来遍历链表并输出交替节点的方法。
更多Python相关文章,请阅读:Python 教程
方法说明
我们可以使用两个指针来遍历链表。第一个指针用来指向奇数位置的节点;第二个指针用来指向偶数位置的节点。当两个指针都不为空时,交替打印它们所指向的节点。
以下是示例代码:
class ListNode:
def __init__(self, val=0, next=None):
self.val = val
self.next = next
def print_alternate_nodes(head):
if not head:
return
odd_ptr = head
even_ptr = head.next
while odd_ptr and even_ptr:
print(odd_ptr.val)
print(even_ptr.val)
odd_ptr = even_ptr.next
if odd_ptr:
even_ptr = odd_ptr.next
在这个函数中,我们首先检查头节点是否为空。然后,我们分别设置 odd_ptr 和 even_ptr 指针为 head 和 head.next。接下来,我们使用一个 while 循环来交替打印它们所指向的节点。while 循环中执行两个步骤:
- 打印 odd_ptr 指向的节点的值。
-
更新 odd_ptr 和 even_ptr:将 odd_ptr 设为 even_ptr 的下一个节点;如果 odd_ptr 不为空,则将 even_ptr 设为 odd_ptr 的下一个节点。如果 odd_ptr 为空,则结束 while 循环。
在这个 while 循环中,我们不使用递归来遍历链表。使用这种方法,我们可以避免 stack overflow,并且提高代码的效率。
示例
让我们看一个示例来说明如何使用我们的函数。
head = ListNode(1)
node1 = ListNode(2)
node2 = ListNode(3)
node3 = ListNode(4)
node4 = ListNode(5)
head.next = node1
node1.next = node2
node2.next = node3
node3.next = node4
print_alternate_nodes(head)
运行上面的代码,输出结果应该是:
1
2
3
4
5
结论
在Python中,可以使用两个指针来遍历链表并输出交替节点。不使用递归的方法可以避免 stack overflow、提高代码效率。我们可以使用以上代码来实现这个功能。