【LeetCode-面试算法经典-Java实现】【061-Rotate List(旋转单链表)】
来源:互联网 发布:张坤淘宝店 编辑:程序博客网 时间:2024/05/17 02:21
【061-Rotate List(旋转单链表)】
【LeetCode-面试算法经典-Java实现】【所有题目目录索引】
原题
Given a list, rotate the list to the right by k places, where k is non-negative.
For example:
Given 1->2->3->4->5->NULL
and k = 2
,
return 4->5->1->2->3->NULL
.
题目大意
向右旋转一个单链表,旋转k个位置,k非负数。
解题思路
用一个辅助root结点连接到链表头,先找到要移动的第一个结点的前驱prev,再将prev后的所有结点接到root后面,再将组成一个旋转后的单链表。
代码实现
链表结点类
public class ListNode { int val; ListNode next; ListNode(int x) { val = x; }}
算法实现类
public class Solution { public ListNode rotateRight(ListNode head, int n) { if (head == null || n < 1) { return head; } ListNode root = new ListNode(0); root.next = head; ListNode p = root; ListNode q = root; int count = 0; for (int i = 0; i <=n; i++) { p = p.next; count++; if (p == null) { count--; // 链表中除头结点后数据个数 n = n % count; // 实际要位置的位数 // 为重新开始位移做准备 i = 0; p = head; } } // 找到第一个要交换的结点的前驱 // q为第一个要交换的结点的前驱 while (p != null) { p = p.next; q = q.next; } p = q; q = root; if (p != null && p.next != null) { // 有要位移的结点 ListNode node; while (p.next != null) { // 摘除结点 node = p.next; p.next = node.next; // 接上结点 node.next = q.next; q.next = node; q = node; // 最后一个移动的节点 } } return root.next; }}
评测结果
点击图片,鼠标不释放,拖动一段位置,释放后在新的窗口中查看完整图片。
特别说明
欢迎转载,转载请注明出处【http://blog.csdn.net/derrantcm/article/details/47182717】
2 0
- 【LeetCode-面试算法经典-Java实现】【061-Rotate List(旋转单链表)】
- 【LeetCode-面试算法经典-Java实现】【189-Rotate Array(旋转数组)】
- 【LeetCode-面试算法经典-Java实现】【092-Reverse Linked List II(反转单链表II)】
- 【LeetCode-面试算法经典-Java实现】【203-Remove Linked List Elements(删除单链表中的元素)】
- 【LeetCode-面试算法经典-Java实现】【206-Reverse Linked List(反转一个单链表)】
- leetcode:Rotate Image (旋转矩阵)【面试算法题】
- leetcode Rotate list (链表旋转)的python实现
- 【LeetCode-面试算法经典-Java实现】【086-Partition List(将单链表进行分区)】
- 【LeetCode-面试算法经典-Java实现】【114-Flatten Binary Tree to Linked List(二叉树转单链表)】
- 【LeetCode-面试算法经典-Java实现】【141-Linked List Cycle(单链表中有环)】
- 【LeetCode-面试算法经典-Java实现】【142-Linked List Cycle II(单链表中有环II)】
- 【LeetCode-面试算法经典-Java实现】【147-Insertion Sort List(链表插入排序)】
- 【LeetCode-面试算法经典-Java实现】【138-Copy List with Random Pointer(拷贝有随机指针的单链表)】
- C实现 LeetCode->Rotate List(双指针大法)(单链表 部分旋转)
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- 【LeetCode-面试算法经典-Java实现】【033-Search in Rotated Sorted Array(在旋转数组中搜索)】
- 【LeetCode-面试算法经典-Java实现】【081-Search in Rotated Sorted Array II(搜索旋转的排序数组)】
- 【LeetCode-面试算法经典-Java实现】【153-Find Minimum in Rotated Sorted Array(找旋转数组中的最小数字)】
- 我的高效编程秘诀
- 插入排序
- PHP,JAVA,NET 开发比较
- 今天遇到的输入法找不到的问题
- 二分查找法 与 拉格朗日插值查找法
- 【LeetCode-面试算法经典-Java实现】【061-Rotate List(旋转单链表)】
- 【LeetCode-面试算法经典-Java实现】【062-Unique Paths(唯一路径)】
- 计算机网络读书笔记-----UDP vs TCP
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
- Mac使用rz、sz远程上传下载文件
- 是幸运,更来源与平时的积累
- Architecting Is About Balancing
- Commit-and- Run Is a Crime
- There Can Be More Than One