码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • LeetCode 61. 旋转链表


    61. 旋转链表

    给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

    示例 1:

    输入:head = [1,2,3,4,5], k = 2
    输出:[4,5,1,2,3]
    

    示例 2:

    输入:head = [0,1,2], k = 4
    输出:[2,0,1]
    

    提示:

    • 链表中节点的数目在范围 [0, 500] 内
    • -100 <= Node.val <= 100
    • 0 <= k <= 2 * 109

    思路:

            这道题与 LeetCode 189. 轮转数组_dreamer'~的博客-CSDN博客 颇为相似,只是数据结构从数组变为了链表。但因为链表结构不支持下标操作,所以解题思路有所不同。

            将链表尾节点指向链表原来的头节点head,构成一个环形链表。然后再通过length和k的关系,找到翻转后新的头结点newHead及其前一个节点preNode的位置。断开preNode与newHead的连接,最后返回newHead即可~

    • 1、遍历链表得到数组长度length
    • 2、并将链表尾节点指向链表原始head节点,构成一个环形链表

    • 3、通过length和k分别得到旋转后新的链表:newHead及其前一个节点preNode的位置

    • 4、将preNode节点(newHead的前一个节点)与newHead节点断开连接

    • 5、返回newHead

    时间复杂度:O(n),最坏情况下,我们需要遍历该链表两次

    空间复杂度:O(1)

    1. /**
    2. * Definition for singly-linked list.
    3. * type ListNode struct {
    4. * Val int
    5. * Next *ListNode
    6. * }
    7. */
    8. // 链表不能像数组一样直接根据下标操作,只能通过遍历的方式
    9. // 那我可不可以先遍历链表值,并将值存入临时数组 空间复杂度:O(N)
    10. func rotateRight(head *ListNode, k int) *ListNode {
    11. if head == nil {
    12. return nil
    13. }
    14. // 1、遍历链表得到数组长度length
    15. length, cur := 1, head
    16. for ; cur.Next != nil; cur = cur.Next { // 这里不是判断cur != nil,是因为要得到链表尾节点位置
    17. length++
    18. }
    19. // 2、并将链表尾节点指向链表原始head节点,构成一个环形链表
    20. cur.Next = head
    21. if k >= length {
    22. k = k % length
    23. }
    24. // 3、通过length和k分别得到旋转后新的链表:newHead及其前一个节点preNode的位置
    25. cur1 := head
    26. for i := length - k - 1; i > 0; i-- {
    27. cur1 = cur1.Next
    28. }
    29. newHead, preNode := cur1.Next, cur1 // preNode:newHead节点的前一个位置
    30. // 4、将preNode节点与newHead节点断开连接
    31. preNode.Next = nil
    32. // 5、返回newHead
    33. return newHead
    34. }

  • 相关阅读:
    源代码到可执行程序的过程详解:预编译、编译、汇编、链接
    工程管理系统简介 工程管理系统源码 java工程管理系统 工程管理系统功能设计
    赛码系统——根据文件生成时间先后顺序对文件进行排序
    避免风险,亚马逊、沃尔玛、阿里国际站选择什么样的测评方式最安全?
    Oracle 创建表语句
    智能井盖生产商家,万宾科技井盖传感器产品详情
    Learn Prompt-Prompt 高级技巧:Agents 组件详解
    指针传2
    POSIX信号量
    【MySQL】(三)DDL数据库操作——数据库的创建、查看、修改、删除
  • 原文地址:https://blog.csdn.net/qq_37102984/article/details/126230943
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | 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号