js实现oddevenlist
实现 Odd Even List
Odd Even List 是指将链表中的奇数位置节点和偶数位置节点分别排列在一起,奇数位置节点在前,偶数位置节点在后。以下是 JavaScript 的实现方法。
方法一:分离节点后合并
定义链表节点结构:
class ListNode {
constructor(val, next = null) {
this.val = val;
this.next = next;
}
}
实现 Odd Even List:
function oddEvenList(head) {
if (!head || !head.next) return head;
let odd = head;
let even = head.next;
let evenHead = even;
while (even && even.next) {
odd.next = even.next;
odd = odd.next;
even.next = odd.next;
even = even.next;
}
odd.next = evenHead;
return head;
}
方法二:使用数组辅助
将链表节点按奇偶位置分开存储到数组中,再重新连接:
function oddEvenList(head) {
if (!head || !head.next) return head;
const nodes = [];
let current = head;
while (current) {
nodes.push(current);
current = current.next;
}
const oddNodes = nodes.filter((_, index) => index % 2 === 0);
const evenNodes = nodes.filter((_, index) => index % 2 === 1);
const newNodes = [...oddNodes, ...evenNodes];
for (let i = 0; i < newNodes.length - 1; i++) {
newNodes[i].next = newNodes[i + 1];
}
newNodes[newNodes.length - 1].next = null;
return newNodes[0];
}
测试用例
创建链表并测试:

// 创建链表 1->2->3->4->5
const node5 = new ListNode(5);
const node4 = new ListNode(4, node5);
const node3 = new ListNode(3, node4);
const node2 = new ListNode(2, node3);
const head = new ListNode(1, node2);
// 执行 oddEvenList
const result = oddEvenList(head);
// 打印结果链表:1->3->5->2->4
let current = result;
while (current) {
console.log(current.val);
current = current.next;
}
复杂度分析
- 时间复杂度:O(n),需要遍历链表一次或多次,但都是线性时间。
- 空间复杂度:O(1) 或 O(n),取决于是否使用辅助数组。
这两种方法都能有效实现 Odd Even List,第一种方法更高效,第二种方法更直观。根据具体需求选择适合的实现方式。






