链表
解题思路
定义两个奇偶链表的哨兵节点;
迭代原链表,奇数插入到奇链表后面,偶数插入到偶链表后面;
将奇链表和偶链表连接起来,并将偶链表的 最后一个节点至 null ,否则会受原链表的影响,生成一个环状链表;
复杂度
-
时间复杂度:
O(N)
,其中 N 是链表中的节点数; -
空间复杂度:
O(1)
代码实现
var oddEvenList = function (head) {
// 1. 定义两个奇偶链表的哨兵节点
const odd = new ListNode(0, null);
const even = new ListNode(0, null);
// 2. 迭代原链表,奇数插入到奇链表后面,偶数插入到偶链表后面
let flag = 1;
let oddCurr = odd;
let evenCurr = even;
while (head) {
if (flag === 1) {
oddCurr.next = head;
oddCurr = oddCurr.next;
} else {
evenCurr.next = head;
evenCurr = evenCurr.next;
}
head = head.next;
flag = flag ^ 1;
}
// 3. 将奇链表和偶链表连接起来,并将偶链表的 最后一个节点至 null,否则会受原链表的影响,生成一个环状链表
oddCurr.next = even.next;
evenCurr.next = null;
return odd.next;
};
leetcode🧑💻 143. 重排链表
上一篇