力扣-重排链表

146 阅读1分钟

解题思路

使用快慢双指针解决 将链表断开,存入数组中,此时得到一个有序的数组 定义left,rigjt指针,left从下标0开始执行,right从数组尾部执行 right进行左移,left进行右移 当left与right相差1时,将right左移到left + 1下

var reorderList = function(head) {
    // 定义头节点,防止修改
    let current = head
    // 定义有序数组
    let res = []
    // 断开重组
    while(current) {
       const next  = current.next
        current.next = null
        res.push(current)
        current = next
    }
    // 定义左右节点
    let [left, right] = [0, res.length - 1]
    while(left < right) {
        // left与right相差值为一
        if (left + 1 !== right) res[right].next = res[left + 1];
            res[left].next = res[right]
        left++
        right--
    }
    return res[0]
};