328. 奇偶链表

链表

解题思路

  1. 定义两个奇偶链表的哨兵节点;

  2. 迭代原链表,奇数插入到奇链表后面,偶数插入到偶链表后面;

  3. 将奇链表和偶链表连接起来,并将偶链表的 最后一个节点至 null ,否则会受原链表的影响,生成一个环状链表;

复杂度

  1. 时间复杂度:O(N),其中 N 是链表中的节点数;

  2. 空间复杂度:O(1)

代码实现

var oddEvenList = function (head) {
    // 1. 定义两个奇偶链表的哨兵节点
    const odd = new ListNode(0, null);
    const even = new ListNode(0, null);

    // 2. 迭代原链表,奇数插入到奇链表后面,偶数插入到偶链表后面
    let flag = 1;
    let oddCurr = odd;
    let evenCurr = even;
    while (head) {
        if (flag === 1) {
            oddCurr.next = head;
            oddCurr = oddCurr.next;
        } else {
            evenCurr.next = head;
            evenCurr = evenCurr.next;
        }
        head = head.next;
        flag = flag ^ 1;
    }

    // 3. 将奇链表和偶链表连接起来,并将偶链表的 最后一个节点至 null,否则会受原链表的影响,生成一个环状链表
    oddCurr.next = even.next;
    evenCurr.next = null;

    return odd.next;
};
打赏作者
您的打赏是我前进的动力
微信
支付宝
评论

中午好👏🏻,我是 ✍🏻   疯狂 codding 中...

粽子

这有关于前端开发的技术文档和你分享。

相信你可以在这里找到对你有用的知识和教程。

了解更多

目录

  1. 1. 链表
    1. 1.1. 解题思路
    2. 1.2. 复杂度
    3. 1.3. 代码实现