LeetCode:61 旋转链表

80 阅读1分钟

「这是我参与2022首次更文挑战的第18天,活动详情查看:2022首次更文挑战

题目

给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。

示例 1:

img

输入:head = [1,2,3,4,5], k = 2
输出:[4,5,1,2,3]

示例 2:

img

输入:head = [0,1,2], k = 4
输出:[2,0,1]

提示:

  • 链表中节点的数目在范围 [0, 500]
  • -100 <= Node.val <= 100
  • 0 <= k <= 2 * 109

解题

解题一:环形链表

思路

转为环形链表然后再断开

代码

/**
 * Definition for singly-linked list.
 */
public class ListNode {
    int val;
    ListNode next;

    ListNode() {
    }

    ListNode(int val) {
        this.val = val;
    }

    ListNode(int val, ListNode next) {
        this.val = val;
        this.next = next;
    }
}

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null || k == 0) {
            return head;
        }
        ListNode temp = head;
        int number = 1;
        while (temp.next != null) {
            temp = temp.next;
            number++;
        }
        // 判断 k 实际值
        k = k % number;
        int move = number - k;
        if (k != 0) {
            temp.next = head;
            for (int i = 0; i < move - 1; i++) {
                head = head.next;
            }
            temp = head.next;
            head.next = null;
            return temp;
        } else {
            return head;
        }
    }
}

总结

性能分析

  • 执行耗时:0 ms,击败了 100.00% 的 Java 用户
  • 内存消耗:40.7 MB,击败了 12.52% 的 Java 用户