题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台
思路:
1、遍历一遍链表,统计出链表长度n,也得到链表最后一个结点;
2、让链表最后一个结点的next指向第一个结点。
3、使用k对n取模得到m,由于是向右移动,所以从头结点出发遍历链表,第n-m个结点作为头结点,但由于是单向链表,所以只能遍历到m结点的前一个结点,该结点的下一个结点就是最终的头结点,然后将该结点指向null。
/**
* Definition for singly-linked list.
* public class ListNode {
* int val;
* ListNode next;
* ListNode() {}
* ListNode(int val) { this.val = val; }
* ListNode(int val, ListNode next) { this.val = val; this.next = next; }
* }
*/
class Solution {
public ListNode rotateRight(ListNode head, int k) {
if(k==0||head==null||head.next==null){
return head;
}
ListNode temp = head;
int n=1;
while(head.next!=null){
head = head.next;
n++;
}
head.next = temp;
int m = n-k%n;
for(int i=0;i<m-1;i++){
temp = temp.next;
}
ListNode res = temp.next;
temp.next=null;
return res;
}
}