跳到主要内容

328.奇偶链表

链接:328.奇偶链表
难度:Medium
标签:链表
简介:给定一个单链表,把所有的奇数节点和偶数节点分别排在一起。请注意,这里的奇数节点和偶数节点指的是节点编号的奇偶性,而不是节点的值的奇偶性。请尝试使用原地算法完成。你的算法的空间复杂度应为 O(1),时间复杂度应为 O(nodes),nodes 为节点总数。

题解 1 - typescript

  • 编辑时间:2020-11-13
  • 执行用时:104ms
  • 内存消耗:42MB
  • 编程语言:typescript
  • 解法介绍:存入数组再一次赋值 next。
function oddEvenList(head: ListNode | null): ListNode | null {
if (head === null) return null;
const cache: ListNode[] = [];
let temp: ListNode | null = head;
const load = () => {
while (temp !== null) {
cache.push(temp);
temp = temp.next?.next ? temp.next.next : null;
}
};
load();
temp = head.next;
load();
cache.forEach((v, i, arr) => (v.next = i === arr.length - 1 ? null : arr[i + 1]));
return head;
}

题解 2 - typescript

  • 编辑时间:2020-11-13
  • 执行用时:108ms
  • 内存消耗:41.5MB
  • 编程语言:typescript
  • 解法介绍:遍历 odd,even。
function oddEvenList(head: ListNode | null): ListNode | null {
if (head === null) return null;
let odd: ListNode | null = head;
let even: ListNode | null = head.next;
const evenHead = head.next;
while (even !== null && even.next !== null) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}