• 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. }

  • 相关阅读:
    【智能优化算法-蒲公英优化器】基于蒲公英优化器求解单目标优化问题附matlab代码
    使用python往png写入文本 将信息隐藏于图片
    基于Python的书籍数据采集与可视化分析系统
    左叶子之和-力扣404-C++
    Java进程和线程
    如何使用蓝牙实现OTA固件升级
    web自动化测试(selenium.webdriver)
    Nginx参数配置详细说明【全局、http块、server块、events块】【已亲测】
    GAN Step By Step -- Step2 GAN的详细介绍及其应用
    同步时序逻辑电路
  • 原文地址:https://blog.csdn.net/qq_37102984/article/details/126230943