跳至主要內容

旋转列表

Mr.He小于 1 分钟

旋转列表

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

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

解法

var rotateRight = function(head, k) {
    if(!head || !head.next){return head}
    // 连接成环
    let tail = head
    let length = 1 // 注意这里要先计数1
    while(tail.next){
        tail = tail.next
        length++
    }
    tail.next = head

    let newTail = head
    k = k % length
    // 移动 5-2 -1 次,移动到 指向3
    for(let i = 1; i < length - k; i++){
        newTail = newTail.next
    }
    // 让头指向 3的next,并将3的next指向null
    head = newTail.next
    newTail.next = null
    return head
};