Description:
Given a list, rotate the list to the right by k places, where k is non-negative.
Solution:
这道题目还是经典的链表操作题。
首先先让一个标记b走k次。
然后让a和b同时开始走,一直到b走到了链表尾,此时a所在的位置就是进行分割的地方。
注意:这里k有可能比链表的长度还大,所以取模一下会比较好。
import java.util.*;
public class Solution {
public ListNode rotateRight(ListNode head, int k) {
if (head == null)
return null;
int len = getLength(head);
k = k % len;
ListNode gap = head;
ListNode tail = head;
for (int i = 0; i < k; i++)
tail = tail.next;
if (tail == null)
return head;
while (tail.next != null) {
tail = tail.next;
gap = gap.next;
}
tail.next = head;
head = gap.next;
gap.next = null;
return head;
}
int getLength(ListNode head) {
ListNode t = head;
int n = 0;
while (t != null) {
t = t.next;
n++;
}
return n;
}
}