当前位置:首页 > JavaScript

js实现oddevenlist

2026-01-31 20:04:04JavaScript

实现 Odd Even List 的 JavaScript 方法

Odd Even List 是一种将链表中的奇数节点和偶数节点分别排列的算法。奇数节点指的是节点位置为奇数的节点,偶数节点指的是节点位置为偶数的节点。以下是实现方法:

js实现oddevenlist

方法一:使用双指针法

function oddEvenList(head) {
    if (head === null) return null;

    let odd = head;
    let even = head.next;
    let evenHead = even;

    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;
}
  • 初始化 odd 指针指向头节点,even 指针指向头节点的下一个节点。
  • 保存 even 的头节点为 evenHead,以便后续连接。
  • 遍历链表,odd 指针连接下一个奇数节点,even 指针连接下一个偶数节点。
  • 最后将 odd 链表的尾部连接到 even 链表的头部。

方法二:使用数组存储节点

function oddEvenList(head) {
    if (head === null) return null;

    const nodes = [];
    let current = head;

    while (current !== null) {
        nodes.push(current);
        current = current.next;
    }

    const oddNodes = nodes.filter((_, index) => index % 2 === 0);
    const evenNodes = nodes.filter((_, index) => index % 2 !== 0);

    const reordered = [...oddNodes, ...evenNodes];

    for (let i = 0; i < reordered.length - 1; i++) {
        reordered[i].next = reordered[i + 1];
    }

    reordered[reordered.length - 1].next = null;
    return reordered[0];
}
  • 遍历链表,将所有节点存入数组。
  • 使用 filter 方法分离奇数节点和偶数节点。
  • 合并奇数节点和偶数节点数组。
  • 重新连接节点,形成新的链表。

方法三:递归实现

function oddEvenList(head, isOdd = true, oddHead = null, evenHead = null, oddTail = null, evenTail = null) {
    if (head === null) {
        if (oddTail !== null) oddTail.next = evenHead;
        return oddHead;
    }

    if (isOdd) {
        if (oddHead === null) {
            oddHead = head;
            oddTail = head;
        } else {
            oddTail.next = head;
            oddTail = oddTail.next;
        }
    } else {
        if (evenHead === null) {
            evenHead = head;
            evenTail = head;
        } else {
            evenTail.next = head;
            evenTail = evenTail.next;
        }
    }

    return oddEvenList(head.next, !isOdd, oddHead, evenHead, oddTail, evenTail);
}
  • 使用递归遍历链表,根据当前节点的奇偶性将其分配到奇数链表或偶数链表。
  • 递归结束后,将奇数链表的尾部连接到偶数链表的头部。

注意事项

  • 确保链表不为空,否则直接返回 null
  • 在双指针法中,注意边界条件,如链表长度为 1 或 2 的情况。
  • 在递归实现中,注意递归深度可能导致的栈溢出问题。

标签: jsoddevenlist
分享给朋友:

相关文章

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js轮播图实现原理

js轮播图实现原理

轮播图的基本原理 轮播图通过动态切换显示的内容(图片、文本等)实现视觉上的滑动效果。核心原理是利用CSS和JavaScript控制元素的显示与隐藏,或通过变换位置实现滑动动画。 实现方法一:…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js分组实现

js分组实现

分组实现方法 在JavaScript中,可以通过多种方式实现数组或对象的分组操作。以下是几种常见的方法: 使用Array.prototype.reduce() 通过reduce方法可以轻松实现数组分…

jquery js

jquery js

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

js实现祖玛

js实现祖玛

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