原题:
给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。
示例 1:
输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL
示例 2:
输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL
解法:其实从题目中就包含了解题思路,“旋转”,是不是必须有一个环才能旋转。思路:先把单向链表变成循环链表,然后旋转之,找到新的头节点,再把头结点的上一个节点的next指向null,这样,就把循环链表断开了,得到新的链表。
/**
* 旋转链表
*
* @param head
* @param k
* @return
*/
public ListNode rotateRight(ListNode head, int k) {
if (head == null) {
return null;
}
ListNode current = head;
//链表长度
int length = 1;
while (current.next != null) {
current = current.next;
length += 1;
}
//变成循环链表
current.next = head; //新的头结点的位置
int index = (length - (k % length)); if (index == 0) {
return head;
}
current = head;
//找到新的头结点
for (int i = 0; i < index - 1; i++) {
current = current.next;
}
head = current.next;
//断开链表
current.next = null; return head;
}

最新文章

  1. Java基础-服务器的发送和接收
  2. 微信平台ASPX高级定制开发(一):如何使用C#建立响应微信接入和自动回复的代码
  3. 9png图片制作
  4. 使用Depth Texture
  5. 导航position:absolute
  6. NHibernate使用ICriteria分页并返回数据库记录总条数
  7. layer
  8. ormlite性能对比
  9. 巧用Red Gate SQL Compare破解加密了的存储过程和函数
  10. 小笔记(一):ajax传递数组及将ajax返回数据赋值
  11. Python笔记:使用pywin32处理excel文件
  12. mongodb数据文件内部结构
  13. Node.js Up and Runing 学习日记(一)
  14. python elasticsearch 批量写入数据
  15. OpenCV中Mat总结
  16. Ubuntu16.04 将其他磁盘挂载到 /home, 解决/home空间不足
  17. [转]RabbitMQ的安装与客户端的简单实用
  18. Java编码 蛇形矩阵的构建与遍历输出
  19. golang 3des/ecb/cbc/pkcs5 加解密
  20. BZOJ 1087 互不侵犯King 状态压缩DP

热门文章

  1. 让Tomcat支持php
  2. 转载:LESS基本用法
  3. 转 Page Object模式
  4. bootstrap3-javascript插件- 慕课笔记
  5. 使用vue的extend自定义组件开发
  6. 2018-8-10-win10-UWP-用Path画图
  7. gevent协程之猴子补丁带来的坑
  8. H2数据库做单测数据库时踩到的坑
  9. jQuery HTML-删除元素
  10. Python3.5-20190507-廖老师-自我笔记-迭代