Given a linked list, rotate the list to the right by k places, where k is non-negative.
Example 1:
Input: 1->2->3->4->5->NULL, k = 2 Output: 4->5->1->2->3->NULL Explanation: rotate 1 steps to the right: 5->1->2->3->4->NULL rotate 2 steps to the right: 4->5->1->2->3->NULL
给定队列和k,把倒数k个节点插到队头,返回新队列
思路:首先遍历一遍获取队列长度n,把从后往前的k个节点移动到队头 等于 把前(n-k)个节点移动到队尾,为了应对k>n的情况,求(n-k)应该是求(n-k%n)。
下面放代码,有问题欢迎留言交流。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) { val = x; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null)
return head;
ListNode p = head, last;
int count = 1;
while (p.next != null) {
p = p.next;
count++;
}
if (count <= 1)
return head;
last = p;
int m = count - k % count;
p = head;
while (m > 0){
head = p.next;
p.next = null;
last.next = p;
last = p;
m--;
p = head;
}
return p;
}
}