当前位置:首页 > 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的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现图片放大缩小

js实现图片放大缩小

实现图片放大缩小的基础方法 使用CSS的transform: scale()属性可以快速实现图片的放大缩小效果。通过JavaScript动态修改该属性值: const img = document.…

js实现列表

js实现列表

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

js树实现

js树实现

树的基本概念 树是一种非线性的数据结构,由节点和边组成。每个节点包含一个值和指向子节点的引用。树的顶部节点称为根节点,没有子节点的节点称为叶节点。 树的实现方式 在JavaScript中,树可以通过…