翻转链表python递归_Python LeetCode-206.反转链表(难度-简单) 两个方法-迭代和递归,以及超简写法(python)...
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)...相关推荐
- LeetCode 206. 反转链表 Reverse Linked List
5-1 链表,在节点间穿针引线 Reverse Linked List 题目: LeetCode 206. 反转链表 反转一个单链表. 示例: 输入: 1->2->3->4-> ...
- LeetCode 206. 反转链表(Reverse Linked List) 16
206. 反转链表 206. Reverse Linked List 题目描述 反转一个单链表. 每日一算法2019/5/19Day 16LeetCode206. Reverse Linked Lis ...
- LeetCode 206. 反转链表
206. 反转链表 难度 简单 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输 ...
- LeetCode 206. 反转链表 双指针法 辅助结点 递归
题目链接 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 提示: 链表中节点的数目范围是 [0, 5000] -5000 <= Node.val <= 5000 进阶: ...
- leetcode - 206. 反转链表
反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可以迭代 ...
- [leetcode] 206.反转链表
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 示例 1: 输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2: 输入:head = [1,2] 输 ...
- LeetCode 206. 反转链表 思考分析
题目 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 进阶: 你可 ...
- 【Java】LeetCode 206 反转链表
题目 :给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 解题思路 : 1.根据以上代码 ,来进行反转链表的操作: 2.最后实现的效果为: 具体思路: 1.首先判断如果链表为空的话, ...
- 26. Leetcode 206. 反转链表 (链表-反转链表)
给你单链表的头节点 head ,请你反转链表,并返回反转后的链表.示例 1:输入:head = [1,2,3,4,5] 输出:[5,4,3,2,1] 示例 2:输入:head = [1,2] 输出:[ ...
最新文章
- 企业绩效管理推不动,如何用绩效创造价值?
- html页面左对齐 不换行,css如何设置不换行?
- UDP 组播---你需要了解这些
- 请写出sfr和sbit的语句格式_最新最全 Oracle ORA-01861: 文字与格式字符串不匹配
- ASML 发布2021年第三季度财报
- 窗口拖动后,还原窗口位置
- web 端可交互的离线渲染器,求 star~
- 幸运抽奖游戏系统带后台源码
- Ubuntu 16.04安装crossover17 并安装 TIM
- 数据结构实验一 顺序表的插入、删除
- numpy矢量化运算
- 政策频发,全国区块链应用不断涌现 | 产业区块链发展周报
- python 实现线程安全的单例模式
- 脱机使用打印机怎么删除缓存_如何在Windows中使用脱机文件来脱机缓存网络文件...
- ROS创建KDL tree
- 配置Hiveserver 高可用,新增Hiveserver2启动失败
- 巴比特 | 元宇宙每日必读:少见!国企直接布局数字藏品平台,“正规军”准备涌入?...
- 上面两点下面一个三角形_【知识点】三角形全等的判定+性质+辅助线技巧都在这里了!...
- Java 二进制与十六进制字符串相互转换
- Android-Studio-Chipmunk版本解决gradle报错connection-refuse的问题