题目:
思路:获取链表长度,k%(链表长度)取余得到i,旋转链表即为将链表倒数第i位变为头指针,第i位的前一位的next指向null,链表尾的next指向head即可;
代码:
/**
* 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) {
int len=0;
ListNode lenNode=head;
//获取链表长度
while(lenNode!=null){
lenNode=lenNode.next;
len++;
}
int looper;//定义旋转节点索引位置
looper=len-k%len;//获取旋转位置
ListNode cursor=head;
ListNode leftNode=head;
ListNode tail=head;
//获取旋转节点
for(int i=0;i<=looper;i++){
cursor=cursor.next;
}
//获取旋转节点的上一节点
for(int i=0;i<looper;i++){
leftNode=leftNode.next;
}
//获取旋转前链表的尾节点
for(int i=0;i<len;i++){
tail=tail.next;
}
leftNode.next=tail.next;
tail.next=head;
head=cursor;
return cursor;
}
}