Python3--反转链表之迭代,递归,穿针引线(头插法)
递归法
反转链表1
class Solution(object):def reverseList(self, head):""":type head: ListNode:rtype: ListNode"""# 递归终止条件是当前为空,或者下一个节点为空if(head==None or head.next==None):return head# 这里的cur就是最后一个节点cur = self.reverseList(head.next)# 这里请配合动画演示理解# 如果链表是 1->2->3->4->5,那么此时的cur就是5# 而head是4,head的下一个是5,下下一个是空# 所以head.next.next 就是5->4head.next.next = head# 防止链表循环,需要将head.next设置为空head.next = None# 每层递归函数都返回cur,也就是最后一个节点return cur
迭代(双指针)
反转链表1
class Solution(object):def reverseList(self, head):""":type head: ListNode:rtype: ListNode"""# 申请两个节点,pre和 cur,pre指向Nonepre = Nonecur = head# 遍历链表,while循环里面的内容其实可以写成一行# 这里只做演示,就不搞那么骚气的写法了while cur:# 记录当前节点的下一个节点tmp = cur.next# 然后将当前节点指向precur.next = pre# pre和cur节点都前进一位pre = curcur = tmpreturn pre
穿针引线(头插法)
反转链表2
下面我们具体解释如何实现。使用三个指针变量 pre、curr、next 来记录反转的过程中需要的变量,它们的意义如下:
curr:指向待反转区域的第一个节点 left;
next:永远指向 curr 的下一个节点,循环过程中,curr 变化以后 next 会变化;
pre:永远指向待反转区域的第一个节点 left 的前一个节点,在循环过程中不变。
操作步骤:
- 先将 curr 的下一个节点记录为 next;
- 执行操作 ①:把 curr 的下一个节点指向 next 的下一个节点;
- 执行操作 ②:把next 的下一个节点指向 pre 的下一个节点;
- 执行操作 ③:把 pre 的下一个节点指向 next。
class Solution:def reverseBetween(self, head: ListNode, left: int, right: int) -> ListNode:# 设置 dummyNode 是这一类问题的一般做法dummy_node = ListNode(-1)dummy_node.next = headpre = dummy_nodefor _ in range(left - 1):pre = pre.nextcur = pre.nextfor _ in range(right - left):next = cur.nextcur.next = next.nextnext.next = pre.nextpre.next = nextreturn dummy_node.next
Python3--反转链表之迭代,递归,穿针引线(头插法)相关推荐
- 【LeetCode】【HOT】206. 反转链表(迭代/递归)
[LeetCode][HOT]206. 反转链表 文章目录 [LeetCode][HOT]206. 反转链表 package hot;import java.util.Arrays;class Lis ...
- 翻转链表II[翻转链表3种方式+dummyHead/头插法/尾插法]
翻转链表 前言 一.翻转链表中间部分 二.dummyHead&头插法&尾插法 1.一次扫描 + 翻转链表(另一次扫描) 2.一次扫描&头插法&尾插法(进阶) 总结 参考 ...
- [剑指offer][JAVA]面试题第[24]题[反转链表][递归][双指针][头插法]
[问题描述][中等] 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点.示例:输入: 1->2->3->4->5->NULL 输出: 5->4 ...
- 005 反转单链表(迭代递归)
输入一个链表,反转链表后,输出新链表的表头. 1.迭代法 迭代法的关键在于用pNext记录当前节点pNode的下一节点的值,否则它在迭代过程时会被丢失. 2.递归法 类似于栈的概念,先递归到最后的节点 ...
- 剑指Offer - 面试题24. 反转链表(遍历/递归)
1. 题目 定义一个函数,输入一个链表的头节点,反转该链表并输出反转后链表的头节点. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4-&g ...
- 反转链表问题的递归解法
目录 一.反转整个链表 二.反转部分链表 一.反转整个链表 给你单链表的头节点 head ,请你反转链表,并返回反转后的链表. 首先在方法中我们需要判断递归终止的情况,如果head==null或者he ...
- 数据结构专题(二):2.4链表的插入操作,头插法
头插法一: 思想如下图: 如下代码: ///头插法建立单链表 LinkListNode *Create_Front_Lklist(ElemType arr[],int length) {LinkLis ...
- 单链表的基础操作(头插法、尾插法、插入和删除)
一.链表的建立(头插法和尾插法) 1.头插法:把后建立的结点插在头部.用这种方法建立起来的链表的实际顺序与输入顺序刚好向反,输出时为倒序! 下面附上代码: struct node *headcreat ...
- leetcode206题:反转链表(迭代或是递归)
题目描述: 反转一个单链表. 示例: 输入: 1->2->3->4->5->NULL 输出: 5->4->3->2->1->NULL 解题思 ...
最新文章
- 互联网人必读的30本书
- JDK8 stream toMap() java.lang.IllegalStateException: Duplicate key异常解决(key重复)
- vscode 调试html页面,vscode调试HTML
- 大学士带你领略“大院大所”黑科技!
- CTFshow 信息收集 web15
- Java基础--static静态原理及API使用示例详解
- java小程序扑克牌_用Java来写一个模拟斗地主发牌的小程序
- LESS CSS 框架简介(转)
- oracle11g导入错误,oracle 11g导入到10g引起的错误
- 涡轮流量计说明书_实际应用中超声波流量计与电磁流量计哪个更好用
- web-attack 1-5视频汇总
- PHP 单元测试问题记录
- hwclock设置日期_hwclock显示系统硬件时钟的日期和时间
- 计算机歌曲带歌词,mp3上怎么看歌词?我的机子说是可以显示的啊
- 【Python_010】利用python对excel进行去重
- 【小白篇】初探 Processing 色彩
- h2o api java_H2O框架简介
- 1-(2-甲氧基乙基)-3-乙基咪唑三氟甲基磺酸盐{[C22O1IM][TfO]}离子液体
- cos三次方积分_COS分之一三次方积分
- 22.实战:Kaggle房价预测