当前位置:首页 > JavaScript

js实现oddevenlist

2026-04-05 12:21:28JavaScript

实现奇偶链表

在JavaScript中实现奇偶链表,将链表的奇数节点和偶数节点分别排在一起。奇数节点指的是节点位置为奇数的节点,偶数节点指的是节点位置为偶数的节点。

js实现oddevenlist

方法一:分离后合并

将奇数节点和偶数节点分离成两个链表,然后将偶数链表连接到奇数链表的尾部。

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;
}

方法二:双指针法

使用两个指针分别跟踪奇数节点和偶数节点,逐步调整指针指向。

function oddEvenList(head) {
    if (head === null || head.next === null) 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 === null || head.next === null) return head;

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

    const helper = (odd, even) => {
        if (even === null || even.next === null) {
            odd.next = evenHead;
            return head;
        }
        odd.next = even.next;
        odd = odd.next;
        even.next = odd.next;
        even = even.next;
        return helper(odd, even);
    };

    return helper(odd, even);
}

注意事项

  • 输入链表为空时直接返回空。
  • 链表只有一个节点时直接返回该节点。
  • 确保偶数链表的头部正确连接到奇数链表的尾部。

测试用例

// 测试链表:1->2->3->4->5
const head = {
    val: 1,
    next: {
        val: 2,
        next: {
            val: 3,
            next: {
                val: 4,
                next: {
                    val: 5,
                    next: null
                }
            }
        }
    }
};

console.log(oddEvenList(head)); // 输出:1->3->5->2->4

以上方法均能有效实现奇偶链表的功能,选择适合场景的方法即可。

标签: jsoddevenlist
分享给朋友:

相关文章

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现图

js实现图

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

js实现密码

js实现密码

密码强度验证 使用正则表达式验证密码强度是一种常见方法。以下代码检查密码是否包含大小写字母、数字和特殊字符,且长度至少为8位: function checkPasswordStrength(pass…

js实现正交

js实现正交

正交的概念 正交在数学和计算机科学中通常指两个向量垂直或线性无关。在编程中,正交性常被用于设计模块化、低耦合的系统。 向量正交判断 判断两个向量是否正交可以通过点积是否为0来实现: fun…

js实现跑马灯

js实现跑马灯

实现跑马灯效果 使用HTML和JavaScript可以轻松实现跑马灯效果。以下是两种常见的实现方式: HTML结构 <div id="marquee"> <span>…