目录

说在前面的话

前言

一、题目(力扣24. 两两交换链表中的节点)

二、题目分析

实现完整代码(Python实现)

总结


说在前面的话

博主也好长一段时间没有更新力扣的刷题系列了,今天给大家带来一道经典题目,今天博主一改往常的风格,用python给大家实现,希望大家可以从中学到一些东西

前言

那么这里博主先安利一下一些干货满满的专栏啦!

手撕数据结构https://blog.csdn.net/yu_cblog/category_11490888.html?spm=1001.2014.3001.5482这里包含了博主很多的数据结构学习上的总结,每一篇都是超级用心编写的,有兴趣的伙伴们都支持一下吧!
算法专栏https://blog.csdn.net/yu_cblog/category_11464817.html

一、题目(力扣24. 两两交换链表中的节点)

二、题目分析

其实这道题标的是中等难度,其实并没有很难。
反转链表相信我们以前都实现过,我们可以直接调用接口。
现在要解决的问题就是怎么传参去反转

这里是实现的一些核心:

  1. 每走两步之后要断开链表,这就需要一个前导指针prev来记录遍历指针的前一个位置,方便断开链表(python没有指针的概念,这里博主只是这样说来方便大家理解)
  2. 调用接口之后我们需要拼接链表,因此我们也需要一个指针记录链表头的位置,我们用slow,遍历指针用fast,因为需要拼接,我们也需要slow的一个前导指针,方便拼接链表

实现完整代码(Python实现)

关于实现过程中的一些细节,博主给大家在代码中指出了!

# Definition for singly-linked list.
# class ListNode:
# def __init__(self, val=0, next=None):
# self.val = val
# self.next = next
class Solution:
def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
if head==None: return head #处理特殊情况
tail=ListNode()
tail.next=None
cur=head # 遍历链表 while cur:
next=cur.next
cur.next=tail
tail=cur # 把tail往后挪动
cur=next
# 找到结尾前最后一个节点 删除它
cur=tail
prev=None
while cur.next:
prev=cur
cur=cur.next
# 此时prev就是前一个
prev.next=None return tail
def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
newhead=ListNode()
newhead.next=head
fast=head
fast_prev=newhead
slow=head
slow_prev=newhead while fast:
for i in range(0,2):
if not fast:
break
fast_prev=fast
fast=fast.next
fast_prev.next=None
slow_prev.next=self.reverseList(slow)
# 这里的fast_prev已经更新了,需要找尾
while fast_prev.next:
fast_prev=fast_prev.next
fast_prev.next=fast
# 迭代
slow_prev=fast_prev
slow=fast
return newhead.next

总结

看到这里 相信大家对这道题的解题方法已经有了一定的理解了吧?如果你感觉这篇文章对你有帮助的话,希望你可以持续关注,订阅专栏,点赞收藏都是我创作的最大动力!

( 转载时请注明作者和出处。未经许可,请勿用于商业用途 )
更多文章请访问我的主页

@背包https://blog.csdn.net/Yu_Cblog?type=blog

【链表】【python】力扣24. 两两交换链表中的节点【超详细的注释和解释】的更多相关文章

  1. 力扣——Partition List(分隔链表) python实现

    题目描述: 中文: 给定一个链表和一个特定值 x,对链表进行分隔,使得所有小于 x 的节点都在大于或等于 x 的节点之前. 你应当保留两个分区中每个节点的初始相对位置. 示例: 输入: head = ...

  2. 力扣—Reorder List(重排链表)python实现

    题目描述: 中文: 给定一个单链表 L:L0→L1→…→Ln-1→Ln ,将其重新排列后变为: L0→Ln→L1→Ln-1→L2→Ln-2→… 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点 ...

  3. 力扣(LeetCode)环形链表 个人题解

    给定一个链表,判断链表中是否有环. 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始). 如果 pos 是 -1,则在该链表中没有环. 示例 1: 输入: ...

  4. 力扣 - 剑指 Offer 22. 链表中倒数第k个节点

    题目 剑指 Offer 22. 链表中倒数第k个节点 思路1(栈) 既然要倒数第k个节点,那我们直接把所有节点放到栈(先进后出)里面,然后pop弹出k个元素就可以了 代码 class Solution ...

  5. 【力扣】82. 删除排序链表中的重复元素 II

    存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字. 返回同样按升序排列的结果链表. 示例 1: 输入:hea ...

  6. 力扣(LeetCode)反转链表 个人题解

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

  7. 力扣题解-面试题22. 链表中倒数第K个节点

    题目描述 输入一个链表,输出该链表中倒数第k个节点.为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点.例如,一个链表有6个节点,从头节点开始,它们的值依次是1.2.3.4.5. ...

  8. 力扣Leetcode 面试题51. 数组中的逆序对 - 归并排序

    在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1: 输入: [7,5,6,4] 输出: 5 限制: 0 <= ...

  9. 力扣 - 剑指 Offer 39. 数组中出现次数超过一半的数字

    题目 剑指 Offer 39. 数组中出现次数超过一半的数字 思路1(排序) 因为题目说一定会存在超过数组长度一半的一个数字,所以我们将数组排序后,位于length/2位置的一定是众数 代码 clas ...

  10. 力扣题目汇总(反转字符串中的单词,EXCEL表列序号,旋置矩阵)

    反转字符串中的单词 III 1.题目描述 给定一个字符串,你需要反转字符串中每个单词的字符顺序,同时仍保留空格和单词的初始顺序. 示例 1: 输入: "Let's take LeetCode ...

随机推荐

  1. 「HDU-2196」Computer (树形DP、树的直径)

    「HDU-2196」Computer 树形dp,树的最长路径(最远点对) 题意 给出一棵nn个结点的无根树,求出每个结点所能到达的最远点的距离. 解法 将无根树转成有根树,并进行两次DFS. 第一次D ...

  2. 基于阿里云 Serverless 快速部署 function 的极致体验

    1.Serverless 前世今生 1.1 Serverless 背景介绍 云计算的不断发展,涌现出很多改变传统IT架构和运维方式的新技术,而以虚拟机.容器.微服务为代表的技术更是在各个层面不断提升云 ...

  3. Linux一键安装docker脚本,含ubuntu和centos

    将脚本保存为docker_install.sh,可以上传git,到服务器中,git clone下来后,sh docker_install.sh即可自动安装 ubuntu实现 # 以Ubuntu为例 # ...

  4. qiankun 微前端实例化使用

    一.qiankun使用场景 1. 简介:qiankun是在single-spa的基础上实现的,可以保证各个项目独立使用,也可以集成使用.各系统之间不受技术栈的限制,集成使用也能保证各样式和全局变量的隔 ...

  5. Winform的使用

    Winform是什么 以下内容,来自朝夕教育课程,没有基础的可以去朝夕学学.这里主要是为了方便我自己回顾查询 创建Winform程序 Program类 Winform项目结构介绍 Winform控件简 ...

  6. Android Gradle 导入 Kotlin gRPC

    project build.gradle plugins { id "com.google.protobuf" version "0.9.1" apply fa ...

  7. 机器学习-无监督机器学习-密度聚类DBSCAN-19

    目录 1. DBSCAN 2. OPTICS 2. MeanShift 1. DBSCAN Density based clustering DBSCAN不要求我们指定cluster簇的数量,避免了异 ...

  8. ApplicationContextAware 的理解和应用

    当我们在项目中获取某一个spring bean时,可以定义一个类,实现ApplicationContextAware  该接口,该接口可以加载获取到所有的 spring bean. package c ...

  9. ASIC 功能验证VTB

    目标 设计流程 验证设计文档和RTL code之间的关系 RTL code(DUT) - 可以当作是一个黑盒,DUT内部是完全不可见的 白盒验证 - DUT内部RTL完全可见 灰盒验证 - DUT内部 ...

  10. Oracle数据库同时建立和使用两个监听器

    1.问题 我分别对两个数据库实例(Lib和Orcl)各自建立了一个监听器,端口号分别为1520和1521,但是默认只启动一个,导致我切换数据库实例的时候, 出现以下问题:状态: 失败 -测试失败: I ...