当前位置:首页 > 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的实现方法。 HTML结构 构建轮播图的HT…

js防抖和节流实现

js防抖和节流实现

防抖(Debounce)的实现 防抖的核心思想是在事件被触发后,延迟执行回调函数。如果在延迟时间内再次触发事件,则重新计时。适用于输入框搜索、窗口大小调整等场景。 function debounce…

js实现论坛

js实现论坛

实现论坛的基本功能 使用JavaScript实现一个论坛需要结合前端和后端技术。前端可以使用React、Vue或Angular等框架,后端可以选择Node.js配合Express或Koa框架。数据库可…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现dh

js实现dh

JavaScript 实现 DH(Diffie-Hellman)密钥交换 Diffie-Hellman(DH)密钥交换是一种安全协议,允许双方在不安全的通信信道上建立一个共享密钥。以下是如何在 Jav…

js实现祖玛

js实现祖玛

实现祖玛游戏的核心思路 祖玛游戏的核心玩法是发射彩色珠子,形成三个或以上相同颜色的珠子即可消除。以下是使用JavaScript实现的基本框架。 游戏初始化 创建画布并初始化游戏状态: const…