1.题目
https://leetcode-cn.com/problems/rotate-list/
2.题解
这道题我是在听歌的时候想到的方法,那就是“爱的魔力转圈圈,。。。”所以我觉得很有趣。这道题是给我们一个链表对象head和一个向右旋转的次数K;既然得到的结果是要在原有的基础上进行旋转的,那么第一个想法就是把他的首尾给连起来;让这个链表对象变成循环链表。我们可以先通过对head.next!=null的判断来得到这个链表的长度。一通循环判断之后得到链表的长度和这个链表的尾部,将这个尾部连接到head上面得到循环链表。之后再算出往左旋转的次数,按照这个次数执行旋转。之后再断开链子指向null;即可得到本题结果。
3.代码
/**
* 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(k<0){
return null;
}
if(head==null||head.next==null){
return head;
}
//主要情况
//链表长度
int count=1;
ListNode pre=head;
while (pre.next!=null){
count++;
pre=pre.next;
}
//做成循环链表
pre.next=head;
//loop 就是循环链表
ListNode loop=pre;
int offsetLeft = count - k % count;//左的偏移量
for (int i = 0; i <offsetLeft ; i++) {
loop=loop.next;
}
//旋转之后的循环链表
ListNode result=loop.next;
loop.next=null;
return result;
}
}
网友评论