当前位置:首页 > JavaScript

js实现oddevenlist

2026-03-13 18:01:49JavaScript

实现 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];
}

测试用例

创建链表并测试:

js实现oddevenlist

// 创建链表 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,第一种方法更高效,第二种方法更直观。根据具体需求选择适合的实现方式。

标签: jsoddevenlist
分享给朋友:

相关文章

js实现列表

js实现列表

使用 JavaScript 实现列表 JavaScript 提供了多种方式来实现列表功能,包括数组操作、DOM 元素动态生成等。以下是几种常见的实现方法: 使用数组存储列表数据 数组是 JavaSc…

js实现图表

js实现图表

在JavaScript中实现图表通常使用流行的图表库,以下是几种常见的方法和工具: 使用Chart.js Chart.js是一个简单灵活的库,适合快速生成响应式图表。安装方式包括CDN引入或npm安…

jquery js

jquery js

jQuery 简介 jQuery 是一个快速、简洁的 JavaScript 库,简化了 HTML 文档遍历、事件处理、动画和 Ajax 交互。它兼容多种浏览器,提供易于使用的 API,使开发者能够更高…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现代码雨

js实现代码雨

实现代码雨效果 使用HTML5 Canvas和JavaScript可以轻松实现经典的代码雨效果。以下是完整的实现代码和说明: HTML结构 <!DOCTYPE html> <htm…

js实现菜单

js实现菜单

实现基本HTML结构 使用HTML创建菜单的基本框架,通常包含<ul>和<li>元素。示例结构如下: <ul id="menu"> <li><…