链表不能通过index来访问,要一步步的走,所以要麻烦一些。
要注意当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 null;
ListNode Head = new ListNode(0);
Head.next = head;
ListNode f = Head, s = Head;
int len = 0;
while(f.next != null) {
len++;
f = f.next;
}
//System.out.println(Head.next.val);
k %= len;
for(int j = len - k; j > 0; j--)
s = s.next;
f.next = Head.next;
//System.out.println(Head.next.val);
Head.next = s.next;
//System.out.println(s.next.val);
s.next = null;
return Head.next;
}
}