美文网首页
LeetCode 61.旋转链表

LeetCode 61.旋转链表

作者: 风卷晨沙 | 来源:发表于2019-06-04 15:27 被阅读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

    相关文章

      网友评论

          本文标题:LeetCode 61.旋转链表

          本文链接:https://www.haomeiwen.com/subject/ahblxctx.html