每日算法 -- 链表
328. 奇偶链表
分析
- 每一次都读取一个奇数节点,然后删除这个节点,然后把这个节点移动到写入节点的前面
- 写入节点每次移动一个位置,保证写入的都是原始下标为奇数的节点
- 最后跳出循环的时候,可能还存在最后一个奇数,单独判断并写入
// 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 春招闯关活动」, 点击查看 活动详情