给定一个链表,旋转链表,将链表每个节点向右移动 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
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/rotate-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
使用数组记录状态
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (null == head || k == 0) {
return head;
}
List<ListNode> origin = new ArrayList<>();
while (null != head) {
origin.add(head);
head = head.next;
}
List<ListNode> result = new ArrayList<>(origin);
for (int i = 0; i < origin.size(); i++) {
result.set((i + k) % origin.size(), origin.get(i));
}
for (int i = 0; i < result.size() - 1; i++) {
result.get(i).next = result.get(i + 1);
}
result.get(result.size() - 1).next = null;
return result.get(0);
}
}