【leetcode】61. 旋转链表 (python)

这篇具有很好参考价值的文章主要介绍了【leetcode】61. 旋转链表 (python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目链接:61.旋转链表

【leetcode】61. 旋转链表 (python),Python,Leetcode,leetcode,链表,python
【leetcode】61. 旋转链表 (python),Python,Leetcode,leetcode,链表,python文章来源地址https://www.toymoban.com/news/detail-551910.html

写法一:暴力

class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        # 暴力:每次移动一个,时间复杂度 O(N^2),空间复杂度O(1)
        if not head or not head.next:
            return head
        p, cnt = head, 0
        while p:
            p = p.next
            cnt += 1  # cnt: 链表长度
        if k > cnt:
            k = k % cnt
        h, p = head, head
        while k:
            while p.next:
                pre = p
                p = p.next
            pre.next = None
            p.next = h
            h = p
            k -= 1
        return h

写法二

# 循环右移, 时间复杂度O(n), 空间复杂度O(1)
#  思路:指针遍历到倒数第k个元素,将其后所有元素插入到链表头部。
    # 如何确定倒数第k个位置的元素?
    #    -->遍历两遍链表,第一遍遍历确定链表元素总个数cnt。第二遍遍历到第cnt-k个位置就是倒数第k个元素。
    # 注意:如果 k > len(head): 取余数,相当于移动余数个元素
class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if not head or not head.next: # 0或者1个元素,移动多少个位置都还是原样
            return head
        p, cnt = head, 0
        while p:  # 确定链表元素总个数
            p = p.next
            cnt += 1
        k = k % cnt # 取余数,循环右移余数个位置
        if k == 0:  
            return head
        p1 = head
        for i in range(cnt - k): # 寻找倒数第k个位置
            pre1 = p1
            p1 = p1.next
        pre1.next = None # 在倒数第k个位置,断开链表
        hh = p1  # hh 为新链表的头指针
        while p1.next: # 寻找到最后一个元素
            p1 = p1.next
        p1.next = head # 让最后一个元素的指针指向head
        return hh

到了这里,关于【leetcode】61. 旋转链表 (python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Leetcode】重排链表、旋转链表、反转链表||

    目录 💡重排链表 题目描述 方法一: 方法二: 💡旋转链表 题目描述 方法: 💡反转链表|| 题目描述 方法: 💡总结 给定一个单链表  L   的头节点  head  ,单链表  L  表示为:  L0 → L1 → … → Ln-1 → Ln  请将其重新排列后变为: L0 → Ln → L1 → Ln-1 → L2 → 

    2024年02月03日
    浏览(85)
  • LeetCode-旋转链表问题

    给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 思路: 这里向右移动k个位置,相当于从链表的倒数第k个节点处断开,之后再将断开的两个子链表按照相反顺序链接。断开倒数第k个节点需要倒数第k+1个节点地址,链接两个子链表需要最后一个节

    2024年02月04日
    浏览(75)
  • 234. 回文链表、Leetcode的Python实现

     博客主页:🏆 看看是李XX还是李歘歘  🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗 点关注不迷路,总有一些📖知识点📖是你想要的 💗 ⛽️今天的内容是      Leetcode    234. 回文链表      ⛽️💻💻💻 234. 回文链表 给你一个单链表的头

    2024年02月06日
    浏览(37)
  • 206. 反转链表、Leetcode的Python实现

    博客主页:🏆 看看是李XX还是李歘歘  🏆 🌺每天分享一些包括但不限于计算机基础、算法等相关的知识点🌺 💗 点关注不迷路,总有一些📖知识点📖是你想要的 💗 ⛽️今天的内容是      Leetcode    206. 反转链表     ⛽️💻💻💻 206. 反转链表 给你单链表的头节点 

    2024年02月06日
    浏览(37)
  • LeetCode in Python 48. Rotate Image/Matrix (旋转图像/矩阵)

    旋转图像/矩阵的重点是寻找旋转前后对应位置的坐标关系。 示例: 图1 旋转图像/矩阵的输入输出示意图  代码:  解释: 1)外层循环控制需要转的大圈圈数,内层循环控制每一圈需要转的小圈圈数,大小圈数的解释见图2,例如n=4,需要循环n // 2 = 2大圈,其中黄色循环箭头

    2024年04月27日
    浏览(62)
  • LeetCode 热题 100(四):48. 旋转图像、240. 搜索二维矩阵 II、234. 回文链表

    题目要求:就是一个顺时针的旋转过程。  思路:观察矩阵,得出翻转前第i行的第J个元素  等于  翻转后倒数第i列的第J个元素,举例说明,第1行第2个元素为“2”,翻转后到了 倒数第1列的第2个元素。说白了只需要针对翻转前的第i行和翻转后的倒数第i列 代码: 题目要求

    2024年02月11日
    浏览(36)
  • 【算法题】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 * 10^9

    2024年01月19日
    浏览(38)
  • 61. 旋转链表 86. 分隔链表 |面试经典题

    题目 :给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 题目链接 :61. 旋转链表 截断拼接即可 题目 :给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留

    2024年01月22日
    浏览(68)
  • HOT 100(61~80)【LeetCode】

    2023-7-2 10:25:40 HOT 100(1~20)【LeetCode】 HOT 100(21~40)【LeetCode】 HOT 100(41~60)【LeetCode】 课程表 提示 中等 1.6K 相关企业 你这个学期必须选修 numCourses 门课程,记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出,其中 prerequisite

    2024年02月12日
    浏览(35)
  • 【LeetCode算法系列题解】第61~65题

    【题目描述】 给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 【示例1】 【示例2】 【提示】 链表中节点的数目在范围 [0, 500] 内 − 100 ≤ N o d e . v a l ≤ 100 -100le Node.valle 100 − 100 ≤ N o d e . v a l ≤ 100 0 ≤ k ≤ 2 ∗ 1 0 9 0le kle 2 * 10^9 0 ≤ k ≤

    2024年02月09日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包