奇偶链表|刷题打卡

102 阅读1分钟

每日算法 -- 链表

328. 奇偶链表

328. 奇偶链表

分析

  1. 每一次都读取一个奇数节点,然后删除这个节点,然后把这个节点移动到写入节点的前面
  2. 写入节点每次移动一个位置,保证写入的都是原始下标为奇数的节点
  3. 最后跳出循环的时候,可能还存在最后一个奇数,单独判断并写入
// 328. 奇偶链表
// https://leetcode-cn.com/problems/odd-even-linked-list/

var oddEvenList = function (head) {
    if (!head || !head.next) return head
    let prev = emptyNode = new ListNode()
    emptyNode.next = head
    let write = read = head
    while (read && read.next) {
        if (write === read) {
            read = read.next.next
            prev = prev.next.next
            continue
        }
        next = read.next.next
        // 删除节点
        prev.next = read.next
        // 插入节点
        read.next = write.next
        write.next = read
        write = write.next
        read = next
        prev =prev.next
    }
    if(read){
        // 最后一个节点了
        prev.next = null
        read.next = write.next
        write.next = read
    }
    return emptyNode.next
};

本文正在参与「掘金 2021 春招闯关活动」, 点击查看 活动详情