版權聲明:本文為博主原創文章,未經博主允許不得轉載。
難度:中等
要求:
給定一個鏈表,旋轉鏈表,使得每個節點向右移動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;
}
}