博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
206. 反转链表
阅读量:4568 次
发布时间:2019-06-08

本文共 890 字,大约阅读时间需要 2 分钟。

问题描述

反转一个单链表。

示例:

输入: 1->2->3->4->5->NULL输出: 5->4->3->2->1->NULL

进阶:

你可以迭代或递归地反转链表。你能否用两种方法解决这道题?

解决方案

1.迭代法

def reverse_loop(head):    """    循坏迭代    :param head:    :return:    """    if not head or not head.next:        return head    pre = None    while head:        next = head.next    # 缓存当前节点的向后指针,待下次迭代用        head.next = pre     # 这一步是反转的关键,相当于把当前的向前指针作为当前节点的向后指针        pre = head          # 作为下次迭代时的(当前节点的)向前指针        head = next         # 作为下次迭代时的(当前)节点    return pre              # 返回头指针,头指针就是迭代到最后一次时的head变量(赋值给了pre)

2.递归法

def reverse_recursion(head):    """    递归法    基准条件是将前置节点的下一位替换成自己,并将自己的下一个节点置空    :param head:    :return:    """    if not head or not head.next:                   # 处理边界情况        return head    new_head = reverse_recursion(head.next)    head.next.next = head    head.next = None    return new_head

转载于:https://www.cnblogs.com/huang-yc/p/10634029.html

你可能感兴趣的文章
SQL Server 2008 教程
查看>>
docker安装
查看>>
JAVA boolean 类型
查看>>
MYSQL进阶学习笔记七:MySQL触发器的创建,应用及管理!(视频序号:进阶_16,17)...
查看>>
极光推送经验之谈-Java后台服务器实现极光推送的两种实现方式
查看>>
hdu 4069 福州赛区网络赛I DLC ***
查看>>
c++11 static_assert
查看>>
ABAP常用事务码
查看>>
使用java https发送请求
查看>>
电影类别分类
查看>>
java web 方面
查看>>
Spring 源码学习(2) —— FactoryBean 的使用
查看>>
wiki 3143 二叉树的前序、中序及后序遍历
查看>>
一位创业者创业失败后,成功的做了一个创业孵化器!
查看>>
程序猿打新总结 6月份 新股申购秘籍
查看>>
导出文本pdf文件
查看>>
C. Table Decorations(Codeforces Round 273)
查看>>
LayoutInflater和inflate()方法的使用方法
查看>>
TsFltMgr.sys系统蓝屏的原因就在于QQ电脑管家!
查看>>
Luogu P4306 JSOI2010 连通数
查看>>