题解 | #旋转链表#

旋转链表

https://www.nowcoder.com/practice/1ad00d19a5fa4b8dae65610af8bdb0ed

/*
 * function ListNode(x){
 *   this.val = x;
 *   this.next = null;
 * }
 */
/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 *
 * @param head ListNode类
 * @param k int整型
 * @return ListNode类
 */
function rotateLinkedList(head, k) {
    if (!head || k === 0) {
        return head;
    }
    // 计算链表长度
    let length = 1;
    let current = head;
    while (current.next) {
        current = current.next;
        length += 1;
    }

    // 将链表变成循环链表
    current.next = head;

    // 计算实际需要移动的步数
    k = k % length;
    if (k === 0) {
        current.next = null;
        return head;
    }

    // 找到新的尾节点
    let newTail = head;
    for (let i = 0; i < length - k - 1; i++) {
        newTail = newTail.next;
    }

     // 找到新的头节点
    const newHead = newTail.next;

    // 断开循环链表
    newTail.next = null;

    return newHead;
}
module.exports = {
    rotateLinkedList: rotateLinkedList,
};

全部评论

相关推荐

喜欢走神的孤勇者练习时长两年半:爱华,信华,等华,黑华
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务