专栏首页Rude3Knife的后端开发专栏[Leetcode][python]Rotate List/旋转链表

[Leetcode][python]Rotate List/旋转链表

题目大意

将一个链表中的元素向右旋转k个位置。

解题思路

参考:http://www.cnblogs.com/zuoyuan/p/3785465.html 解题思路:循环右移一条链表,比如k=2,(1,2,3,4,5)循环右移两位变为(4,5,1,2,3)。由于k值有可能比链表长度大很多,所以先要用一个count变量求出链表的长度。而k%count就是循环右移的步数。

代码

# Definition for singly-linked list.
# class ListNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.next = None

class Solution(object):
    def rotateRight(self, head, k):
        """
        :type head: ListNode
        :type k: int
        :rtype: ListNode
        """
        if k == 0:
            return head
        if head == None:
            return head
        dummy = ListNode(0)
        dummy.next = head
        p = dummy

        count = 0
        # 统计链表长度(这里实际上是从0开始数,数到4就结束,正好5个。)
        while p.next:  
            p = p.next
            count += 1
        step = count - ( k % count )

        # 此时p是最后一个数5,p.next指向null
        # p.next指向第一个数,这样p就是0,1,2,3,4,5,1,2,3,4,5
        p.next = dummy.next  
        for i in range(0, step):
            p = p.next

        # 此时p是最后一个未翻转的数3,将其下一个数4,放到head节点
        head = p.next
        # 此时head是4,5,1,2,3,4,5,1,2,3,4,5
        p.next = None
        # 此时head是4,5,1,2,3
        return head

总结

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • [Leetcode][python][Java]Reverse Linked List/Reverse Linked List II/反转链表/反转链表 II

    必看: http://blog.csdn.net/autumn20080101/article/details/7607148 以下代码若理解不通请务必...

    后端技术漫谈
  • [Leetcode][python]Merge Two Sorted Lists/合并两个有序链表

    已开始将其当成两个list,去分别修改其值,但其实应该修改的是链表的指针。 并且还有一个值得注意的是dummy node,见总结。

    后端技术漫谈
  • [Leetcode][python]Reverse Nodes in k-Group/k个一组翻转链表

    参考: https://shenjie1993.gitbooks.io/leetcode-python/025%20Reverse%20Nodes%20in...

    后端技术漫谈
  • python算法与数据结构-单链表(38)

    链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可...

    Se7eN_HOU
  • 深入理解 Linux Cgroup 系列(一):基本概念

    Cgroup 是 Linux kernel 的一项功能:它是在一个系统中运行的层级制进程组,你可对其进行资源分配(如 CPU 时间、系统内存、网络带宽或者这些资...

    米开朗基杨
  • LeetCode19 移除倒数第N个元素

    https://leetcode.com/problems/remove-nth-node-from-end-of-list

    TechFlow-承志
  • Kaggle的入门介绍:通过竞赛磨练机器学习技能

    在数据科学领域,可用的资源非常的多:从Datacamp到Udacity再到KDnuggets,在网上有很多可以在线学习数据科学的地方。但是,如果你是一个喜欢在实...

    AiTechYun
  • 腾讯 AI Lab 计算机视觉中心人脸 & OCR 团队近期成果介绍 ( 2 )

    近期,我们团队在人脸识别的关键任务上也取得突破,在人脸识别的国际权威评测平台(Megaface Challenge)中取得了国际领先的成果。同时,在人脸检测中,...

    周景超
  • 大数据成智慧城市推动力 数据安全受关注

    智慧城市不是海市蜃楼,智慧城市的建设需要众多技术支撑,而大数据就是智慧城市构建的基石,更是推进智慧城市发展的动力。2013年2月5日,国务院出台了...

    安恒信息
  • 【C语言笔记】变参函数

    提到变参函数,我们的感觉是不是既熟悉又陌生?感觉熟悉是因为我们平时都在使用着,如我们常使用的printf()函数与scanf()函数就是典型的变参函数。因为pr...

    正念君

扫码关注云+社区

领取腾讯云代金券

玩转腾讯云 有奖征文活动