码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 【链表】【python】力扣24. 两两交换链表中的节点【超详细的注释和解释】


    目录

    说在前面的话

    前言

    一、题目(力扣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实现)

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

    1. # Definition for singly-linked list.
    2. # class ListNode:
    3. # def __init__(self, val=0, next=None):
    4. # self.val = val
    5. # self.next = next
    6. class Solution:
    7. def reverseList(self, head: Optional[ListNode]) -> Optional[ListNode]:
    8. if head==None: return head #处理特殊情况
    9. tail=ListNode()
    10. tail.next=None
    11. cur=head # 遍历链表
    12. while cur:
    13. next=cur.next
    14. cur.next=tail
    15. tail=cur # 把tail往后挪动
    16. cur=next
    17. # 找到结尾前最后一个节点 删除它
    18. cur=tail
    19. prev=None
    20. while cur.next:
    21. prev=cur
    22. cur=cur.next
    23. # 此时prev就是前一个
    24. prev.next=None
    25. return tail
    26. def swapPairs(self, head: Optional[ListNode]) -> Optional[ListNode]:
    27. newhead=ListNode()
    28. newhead.next=head
    29. fast=head
    30. fast_prev=newhead
    31. slow=head
    32. slow_prev=newhead
    33. while fast:
    34. for i in range(0,2):
    35. if not fast:
    36. break
    37. fast_prev=fast
    38. fast=fast.next
    39. fast_prev.next=None
    40. slow_prev.next=self.reverseList(slow)
    41. # 这里的fast_prev已经更新了,需要找尾
    42. while fast_prev.next:
    43. fast_prev=fast_prev.next
    44. fast_prev.next=fast
    45. # 迭代
    46. slow_prev=fast_prev
    47. slow=fast
    48. return newhead.next

    总结

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

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

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

  • 相关阅读:
    漏洞复现 - - - WebLogic反序列化远程命令执行漏洞(二)
    rust 智能指针
    Python数据分析案例02——泰尔指数的计算
    与字节、小米、移动云等企业一起揭秘 RocketMQ 实践之道
    JavaScript数据结构与算法
    亚马逊哪些因素会影响转化率,如何才能做得更好(测评)
    工程伦理--9.1 岗位胜任力
    4.5V 至 23V、TAS2781RYYR音频放大器、QPF4617TR13 Wi-Fi® 6E非线性前端模块和DRV2667RGPR全集成压电式触觉驱动器
    排序算法可视化
    linux中通配符与正则表达式的区别
  • 原文地址:https://blog.csdn.net/Yu_Cblog/article/details/126581405
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号