LeetCode 61.旋转链表

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
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 *k *个位置,其中 *k *是非负数。 示例 1: 示...
    高大宽333阅读 1,917评论 0 0
  • 题目地址:https://leetcode-cn.com/problems/rotate-list/ 题目: 给定...
    monkey01阅读 3,655评论 0 0
  • 61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例:输入: 1-...
    杏仁小核桃阅读 1,384评论 0 0
  • 题目 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1:输入: 1->2...
    多彩海洋阅读 1,742评论 1 1
  • 有一个声音在耳边呼唤, 那是黑土深沉的召唤。 这黑土浑厚的身躯, 养育几代的青春, 如今他依旧年轻。 只是那年轻的...
    东北老农阅读 1,794评论 0 3