LeetCode 61.旋转链表

2019-06-04  本文已影响0人  风卷晨沙

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;
    }
}

4.结果截图

image.png
上一篇下一篇

猜你喜欢

热点阅读