侧边栏壁纸
博主头像
GabrielxD

列車は必ず次の駅へ。では舞台は?私たちは?

  • 累计撰写 471 篇文章
  • 累计创建 108 个标签
  • 累计收到 9 条评论

目 录CONTENT

文章目录

【链表, 脑筋急转弯】旋转链表

GabrielxD
2022-10-22 / 0 评论 / 0 点赞 / 12 阅读 / 278 字 / 正在检测是否收录...

题目

61. 旋转链表


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

示例 1:

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

示例 2:

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

提示:

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

解题

方法一:脑筋急转弯

思路

说是旋转链表其实就是把链表最后的 k 个节点接在链表的头部,直接模拟就好了。

k 可能会比链表长度要大,所以要提前计出链表的长度(n)然后把 kn 取模。

注意几个特判。

代码

class Solution {
    public ListNode rotateRight(ListNode head, int k) {
        if (head == null) return null;
        if (k == 0 || head.next == null) return head;
        int n = 0;
        ListNode curr = head;
        while (curr != null && curr.next != null) {
            curr = curr.next;
            ++n;
        }
        ++n;
        ListNode rear = curr;
        k = n - k % n;
        if (k == n) return head;
        curr = head;
        while (--k > 0) curr = curr.next;
        ListNode latter = curr.next;
        curr.next = null;
        rear.next = head;
        return latter;
    }
}
0

评论区