Leetcode61. 旋转链表(JAVA巧妙成环模拟)

Posted !0 !

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Leetcode61. 旋转链表(JAVA巧妙成环模拟)相关的知识,希望对你有一定的参考价值。

题目链接:https://leetcode-cn.com/problems/rotate-list/

解题思路

因为这题的k范围远大于链表节点数,所以我们可以先遍历链表并且记录链表长度,遍历完链表之后把链表首尾相连成环。然后从头节点开始,遍历len-k%len-1次就能找到答案链表的头节点的前继节点,先把答案头节点用newHead记住,然后断掉前继节点,这样就形成了答案链表。

代码

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if(head == null || k == 0)
            return head;
        ListNode l1 = head;
        int len = 1;
        while(l1.next != null) {
            l1 = l1.next;
            len++;
        }
        l1.next = head;
        ListNode l2 = head;
        for(int i = 1; i < len - k % len; i++) 
            l2 = l2.next;
        ListNode newHead = l2.next;
        l2.next = null;
        return newHead;
    }
}

复杂度分析

  • 时间复杂度: O ( n ) O(n) O(n),n为链表长度
  • 空间复杂度: O ( 1 ) O(1) O(1)

以上是关于Leetcode61. 旋转链表(JAVA巧妙成环模拟)的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode Java刷题笔记—61. 旋转链表

LeetCode 61. 旋转链表 c++/java详细题解

LeetCode题解61_旋转链表(Rotate-List)

LeetCode:旋转链表61

leetcode61旋转链表

「LeetCode」61. 旋转链表