1.题目描述

反转一个单链表。

实例

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

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

进阶:

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

2.分析

链表作为比较基础的数据结构,是一定要会的,以下将展示链表的逆序的两种方式。

3.解决

①迭代解决

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def reverseList(self, head: ListNode) -> ListNode:

"""

迭代

"""

if (not head) or head.val==None: # 避免链表为空的特殊情况

return head

current_node = head

pre_node = None # 定义前一个点

while current_node: # 判断条件为当前点是否为None

next_node = current_node.next

current_node.next = pre_node

pre_node = current_node # 将前一个点定义为当前点

head = pre_node # 可以直接return pre_node,这么写是比较好理解

current_node = next_node # 定义下一个循环的当前节点为下一个节点

return head

迭代的蛇皮走位写法,可能会有点晕

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def reverseList(self, head: ListNode) -> ListNode:

"""

迭代之蛇皮走位写法

"""

current_node,pre_node = head,None

while current_node:

# 主要是利用了python的一个特性,在交换值的时候(以下式子),左边的值是暂时不变的

pre_node,current_node.next,current_node = current_node,pre_node,current_node.next

return pre_node

②递归解决

# Definition for singly-linked list.

# class ListNode:

# def __init__(self, x):

# self.val = x

# self.next = None

class Solution:

def reverseList(self, head: ListNode) -> ListNode:

"""

递归的写法

递归重要的是你要学会倒着考虑问题

"""

if not head or head.next == None: # 递归终止条件(以及排除特殊值问题)

return head

else:

newhead = self.reverseList(head.next) # newhead一直是指向最后一个节点

head.next.next = head

head.next = None # 仅仅在第一个元素时候起作用(递归就是一个栈,后进先出,所以先考虑末尾,最后考虑头)

return newhead

翻转链表python递归_Python LeetCode-206.反转链表(难度-简单) 两个方法-迭代和递归,以及超简写法(python)...相关推荐

  1. LeetCode 206. 反转链表 Reverse Linked List

    5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...

  2. LeetCode 206. 反转链表(Reverse Linked List) 16

    206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...

  3. LeetCode 206. 反转链表

    206. 反转链表 难度 简单 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输 ...

  4. LeetCode 206. 反转链表 双指针法 辅助结点 递归

    题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...

  5. leetcode - 206. 反转链表

    反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代 ...

  6. [leetcode] 206.反转链表

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输 ...

  7. LeetCode 206. 反转链表 思考分析

    题目 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可 ...

  8. 【Java】LeetCode 206 反转链表

    题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...

  9. 26. Leetcode 206. 反转链表 (链表-反转链表)

    给你单链表的头节点 head ,请你反转链表,并返回反转后的链表.示例 1:输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:输入:head = [1,2] 输出:[ ...

最新文章

  1. 企业绩效管理推不动,如何用绩效创造价值?
  2. html页面左对齐 不换行,css如何设置不换行?
  3. UDP 组播---你需要了解这些
  4. 请写出sfr和sbit的语句格式_最新最全 Oracle ORA-01861: 文字与格式字符串不匹配
  5. ASML 发布2021年第三季度财报
  6. 窗口拖动后,还原窗口位置
  7. web 端可交互的离线渲染器,求 star~
  8. 幸运抽奖游戏系统带后台源码
  9. Ubuntu 16.04安装crossover17 并安装 TIM
  10. 数据结构实验一 顺序表的插入、删除
  11. numpy矢量化运算
  12. 政策频发,全国区块链应用不断涌现 | 产业区块链发展周报
  13. python 实现线程安全的单例模式
  14. 脱机使用打印机怎么删除缓存_如何在Windows中使用脱机文件来脱机缓存网络文件...
  15. ROS创建KDL tree
  16. 配置Hiveserver 高可用,新增Hiveserver2启动失败
  17. 巴比特 | 元宇宙每日必读:少见!国企直接布局数字藏品平台,“正规军”准备涌入?...
  18. 上面两点下面一个三角形_【知识点】三角形全等的判定+性质+辅助线技巧都在这里了!...
  19. Java 二进制与十六进制字符串相互转换
  20. Android-Studio-Chipmunk版本解决gradle报错connection-refuse的问题

热门文章

  1. VSCode如何进入到终端中
  2. MySQL修改主键初始值为1
  3. css的类选择器#和id选择器.
  4. java实验6 词频统计_Java实现的词频统计——单元测试
  5. phpfpm内存越来越高_DDR5内存规范发布
  6. numpy产生一个大于0的随机数_Numpy中常用随机函数的总结
  7. mysql5.7.29下载与安装并设置密码
  8. 远程连接Linux服务器无法连接解决办法
  9. Apollo使用ConfigBean装载配置
  10. Win10下安装不同版本的MySQL