LeetCode Rotate List
2016-01-15 19:47
260 查看
LeetCode解题之Rotate List
原题
将一个链表中的元素向右旋转k个位置。注意点:
k可能非常大
最好不要申请额外空间
例子:
输入: list = 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解题思路
如果能有链表的长度,就不用担心k非常大而不断的循环旋转了。所谓的旋转其实就是在链表中间断开,首尾相连。在获取链表长度的时候顺便把链表的首尾连起来。注意断开的位置是在倒数第k个之前。AC源码
[code]# Definition for singly-linked list. class ListNode(object): def __init__(self, x): self.val = x self.next = None def myprint(self): print(self.val) if self.next: self.next.myprint() class Solution(object): def rotateRight(self, head, k): """ :type head: ListNode :type k: int :rtype: ListNode """ if not head: return [] curr = head length = 1 while curr.next: curr = curr.next length += 1 curr.next = head cur = head shift = length - k % length while shift > 0: curr = curr.next shift -= 1 result = curr.next curr.next = None return result if __name__ == "__main__": l1 = ListNode(1) l2 = ListNode(2) l3 = ListNode(3) l4 = ListNode(4) l5 = ListNode(5) l1.next = l2 l2.next = l3 l3.next = l4 l4.next = l5 result = Solution().rotateRight(l1, 2) result.myprint()
欢迎查看我的Github来获得相关源码。
相关文章推荐
- 12小时包你学会基于ReactMix框架的ReactNativeApp开发(二)基于Css+HTML写第一个app页面
- 聊聊视频分段下载的思路
- 【转载】对Kalman(卡尔曼)滤波器的理解
- Codeforces 607 D Zuma
- linux 文件查找
- 存储地址空间结构_20160114
- Java军事卫星拓扑图MilitaryDemo
- easyui datagrid 表格组件列属性formatter和styler使用方法
- android锁屏分析
- 重新创建Activity
- linux服务器 磁盘和文件系统管理(四) 磁盘配额管理与实例
- 定点数的表示
- 005-httpd基础配置
- git reset
- VMWare WorkStation 10/11/12 for Windows10解决虚拟机无法上网的问题
- [POJ 2184]Cow Exhibition[DP][01背包]
- 51单片机的物理存储地址_20160112
- MVC中页面传值方式总结
- Python MySQL API
- Java中的sun.misc.Unsafe包