Python递归与迭代实现链表反转详解

Dylan
Dylan
发布时间:2026-10-15| 4人浏览过
原创

本文详细介绍如何使用Python通过递归和迭代两种方法实现链表反转。首先定义链表节点结构,接着演示如何构建链表并遍历打印。重点解析递归法的三要素(函数功能、结束条件、缩小范围)及具体代码实现,同时提供迭代法的完整逻辑与代码。包含完整的测试用例及输出结果分析,帮助读者深入理解链表操作。

链表节点定义与基础操作

首先需要定义链表节点(ListNode)的数据结构,包含数据域和指向下一个节点的指针。

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

接下来编写函数,将给定的列表L转换为链表结构。

def make_list(L):

具体初始化过程:创建头节点,遍历列表剩余元素,依次创建新节点并连接,最后返回头节点。

  head = ListNode(L[0])
    cur = head
    for i in L[1:]:
        cur.next = ListNode(i)
        cur = cur.next
    return head
 

定义遍历函数,用于打印链表中的所有元素,便于后续验证反转效果。

def print_list(head):
 
    cur = head
    while cur != None:
        print(cur.data,end=' ')
        cur = cur.next
 

递归法反转链表实现

介绍使用递归方法反转链表的核心逻辑。

def reverse_list(head):

递归实现需明确以下三个关键要素:

  • 1. 明确函数功能:该函数负责反转当前链表,并返回新的头节点。
  • 2. 确定结束条件:当链表为空(head为None)或仅包含一个节点(head.next为None)时,直接返回当前头节点。
    if head==None or head.next==None:
        return head
  • 3. 确定等价条件(缩小问题规模):对于数组,范围缩小是n到n-1;对于链表,可以考虑处理head之后的子链表,即递归处理head.next节点。
>head.next
    reverse = reverse_list(head.next)  #假设reverse是head以后的、已经反转过的链表

在递归返回后,需要将当前head节点连接到已反转的子链表(reverse)上,具体操作是将head.next指向reverse,并断开原next连接。

    tmp = head.next
    tmp.next = head
    head.next = None
 return reverse  #返回新的列表

迭代法反转链表与测试验证

介绍使用迭代方法反转链表的实现方案。

def reverse_list2(head):
    #print_list(head)
    cur = head
    pre = None
    while cur:
        tmp = cur.next
        cur.next = pre
        pre = cur
        cur = tmp
    head = pre
    return head
 
if __name__ == '__main__':
 
    L = [3,2,7,8]
    head = make_list(L)
 

演示如何正序打印原始链表,以对比反转前后的状态。

    print('原始list:')
    print_list(head)
    print('\n')
 

展示调用递归反转函数后,打印反转后的链表结果。

    revere = reverse_list(head)
    print('反转一次的list:')
    print_list(revere)
    print('\n')
 

展示再次调用迭代反转函数(reverse_list2)后的打印结果,并分析head节点在多次反转后的变化。

    print('head is')
    print_list(head)  #发现此时head节点变成了最后一个节点,说明函数是对head这个实例直接作用的
    print('\n')
 
    # print('revere is')
    # print_list(revere)
    # print('\n')
 
    print('反转两次的list:')
    print_list(reverse_list2(revere))

以上就是Python利用递归和迭代方法实现链表反转的完整介绍。如需了解更多Python链表相关技术,可参考本站其他文章或继续浏览后续内容,感谢支持。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。