旋转链表
一、LeetCode题解
瞧一瞧(求star!)
- LeetCode题解Javascript版本:Gitbook版本传送门
- LeetCode题解Javascript版本:CSDN传送门
- 前端进阶笔记:Gitbook传送门
二、算法题
题目
给定一个链表,旋转链表,将链表每个节点向右移动 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]
};
结果
关于我
- decs: 19年毕业的前端开发一枚,沉迷Js
- E-mail: [email protected]
- 个人博客: CSDN
- GitHub: 传送门