LeetCode题解:61.旋转链表

旋转链表

一、LeetCode题解

瞧一瞧(求star!)

二、算法题

题目

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

示例 1:

输入: 1->2->3->4->5->NULL, k = 2
输出: 4->5->1->2->3->NULL
解释:
向右旋转 1 步: 5->1->2->3->4->NULL
向右旋转 2 步: 4->5->1->2->3->NULL

示例 2:

输入: 0->1->2->NULL, k = 4
输出: 2->0->1->NULL
解释:
向右旋转 1 步: 2->0->1->NULL
向右旋转 2 步: 1->2->0->NULL
向右旋转 3 步: 0->1->2->NULL
向右旋转 4 步: 2->0->1->NULL

解法一 (链表->数组->链表)

思路

代码

var rotateRight = function(head, k) {
    if(!head) return null
    var cur = head
    var arr = [] // 节点数组
    var len = 0 // 节点长度
    while(cur){
        arr.push(cur.val)
        cur = cur.next
        len++
    }
    k = k % len // 去掉环
    while(k > 0){
        let temp = arr.pop()
        arr.unshift(temp)
        k--
    }
    for(let i = 0; i < arr.length; i++){
        arr[i] = new ListNode(arr[i])
    }
    var i = 0
    while(i < arr.length){
        arr[i].next = arr[i+1]
    }
    return arr[0]
};

结果

在这里插入图片描述

关于我

猜你喜欢

转载自blog.csdn.net/jbj6568839z/article/details/106059857
今日推荐