版权声明:本文为博主原创文章,未经博主允许不得转载。
难度:中等
要求:
给定一个链表,旋转链表,使得每个节点向右移动k个位置,其中k是一个非负数
样例
给出链表1->2->3->4->5->null和k=2
返回4->5->1->2->3->null
思路:
解题容易,注意边界处理。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode(int x) {
* val = x;
* next = null;
* }
* }
*/
public class Solution {
/*
* @param head: the List
* @param k: rotate to the right k places
* @return: the list after rotation
*/
public ListNode rotateRight(ListNode head, int k) {
if(head == null){
return null;
}
int len = getLen(head);
k %= len;
ListNode root = new ListNode(0);
root.next = head;
head = root;
for(int i = 0; i < k; i++){
head = head.next;
}
ListNode tail = root;
while(head.next != null){
head = head.next;
tail = tail.next;
}
head.next = root.next;
root.next = tail.next;
tail.next = null;
return root.next;
}
private int getLen(ListNode node){
int len = 0;
while(node != null){
node = node.next;
len++;
}
return len;
}
}