leetcode-61- 旋转链表

102 阅读1分钟

image.png leetcode原题

解题思路

1.定义 cur 指针,遍历链表,直到链表的尾指针,在遍历的过程中,同时记录链表的长度 n
2.将链表的尾节点指向链表的头节点,即形成一个闭环
3.计算 k % n 的值
4.从头节点开始往前走 n - k - 1 步,因为链表向右移动 k 个位置,类似于将环状链表从倒数第 k 个节点断开
5.记录当前节点的下一个节点为 head,并且将当前节点指向 null
6.返回 head,即为链表向右移动 k 个位置之后的链表

var rotateRight = function(head, k) {
    if (!head || !head.next || k === 0) return head
    let cur = head, n = 1
    while (cur.next) {
        cur = cur.next
        n++
    }
    cur.next = head
    k %= n
    let i = n - k 
    while (--i) {
        head = head.next
    }
    cur = head
    head = cur.next
    cur.next = null
    return head
};