美文网首页
61. 旋转链表

61. 旋转链表

作者: Abeants | 来源:发表于2022-07-19 11:09 被阅读0次

给你一个链表的头节点 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 * 109

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/rotate-list
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路及方法

比较简单的一道题,我们先看示例1,设链表长度为len,我们只需要找到旋转后的新尾节点,一般是len-k个节点,比如示例1就是第3个,然后先将原始尾节点和头节点相链,将新尾节点与其next节点断链,next节点就是旋转后链表的头节点。

但是有个问题需要注意,看示例2,旋转长度超过链表长度,我们只需要取模即可,因为旋转len次后链表又恢复原始状态。

/**
 * 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) return null;
        int len = 1;
        ListNode last = head;
        while (last.next != null) {
            len++;
            last = last.next;
        }

        // 每个节点移动k % len次
        k = len - k % len;
        if (k == len) return head;
        
        // 找到新的头节点,并将原始尾节点和原始头节点相连
        last.next = head;
        while (k-- > 0) {
            last = last.next;
        }
        ListNode dummy = last.next;
        last.next = null;

        return dummy;
    }
}

结果如下:

相关文章

  • leetcode 链表 [C语言]

    21. 合并两个有序链表 合并两个有序链表 61. 旋转链表 (快慢指针) 61. 旋转链表 相关标签 : 链表 ...

  • 61. 旋转链表

    61. 旋转链表 问题 给定一个链表,旋转链表,将链表每个节点向右移动 个位置,其中 是非负数。 示例 1: 输...

  • [LeetCode]61. 旋转链表

    61. 旋转链表给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。示例:输入: 1-...

  • 61. 旋转链表

    61. 旋转链表 双指针,一个先走k步

  • 【D33】旋转链表 (LC61)

    61. 旋转链表[https://leetcode-cn.com/problems/rotate-list/] 给...

  • LeetCode:61. 旋转链表

    问题链接 61. 旋转链表[https://leetcode-cn.com/problems/rotate-lis...

  • 61.旋转链表

  • 61.旋转链表

    题目给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 示例 1:输入: 1->2-...

  • 61. 旋转链表

    思路 找到旧的尾部并将其与链表头相连 old_tail.next = head,整个链表闭合成环,同时计算出链表的...

  • 61. 旋转链表

    题目描述 给定一个链表,旋转链表,将链表每个节点向右移动 k 个位置,其中 k 是非负数。 解法

网友评论

      本文标题:61. 旋转链表

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