leetcode328:奇偶链表

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别分组,保持它们原有的相对顺序,然后把偶数索引节点分组连接到奇数索引节点分组之后,返回重新排序的链表。

第一个节点的索引被认为是 奇数 , 第二个节点的索引为 偶数 ,以此类推。

请注意,偶数组和奇数组内部的相对顺序应该与输入时保持一致。

你必须在 O(1) 的额外空间复杂度和 O(n) 的时间复杂度下解决这个问题。

示例 1:

输入: head = 1,2,3,4,5

输出: 1,3,5,2,4

示例 2:

输入: head = 2,1,3,5,6,4,7

输出: 2,3,6,7,1,5,4

java 复制代码
package leetcode;

public class OddEvenList {
    public static void main(String[] args) {

    }

    public ListNode oddEvenList(ListNode head) {
        if (head == null || head.next == null) {
            return head;
        }
        // 奇数节点头节点
        ListNode odd = head;
        // 奇数节点的下一个是偶数节点
        ListNode even = head.next;
        // 偶数节点头节点
        ListNode evenHead = even;
        // 从偶数节点开始遍历,如果当前节点为空,或者后一个节点为空,说明当前链表已经遍历完毕,不需要再遍历了
        while (even != null && even.next != null) {
            // 原来奇数节点的下一个节点是偶数节点
            odd.next = even.next;
            // 让 odd移动到最新的由奇数组成的链表的尾部
            odd = odd.next;
            // 原来偶数节点的下一个节点是奇数节点
            even.next = odd.next;
            // 让even移动到最新的由偶数组成的链表的尾部
            even = even.next;
        }
        // 右奇数节点组成的链表的尾部的 next 指针指向由偶数节点组成的链表的头部
        odd.next = evenHead;
        return head;
    }
}

执行结果

相关推荐
想要成为糕糕手14 小时前
前端必修课:JavaScript 数组与数据结构底层逻辑全解析
javascript·数据结构·面试
tyung16 小时前
Go 手写 Wait-Free SPSC 无界队列:无 CAS、无锁、泛型节点池
数据结构·后端·go
Chen_harmony16 小时前
一、数据结构概念和复杂度计算
数据结构
小欣加油17 小时前
leetcode287寻找重复数
数据结构·c++·算法·leetcode
fie888919 小时前
LBP + HOG 特征检测与识别 MATLAB 实现
数据结构·算法·matlab
退休倒计时20 小时前
【每日一题】LeetCode 15. 三数之和 TypeScript
数据结构·算法·leetcode·typescript
AbandonForce20 小时前
滑动窗口:定长滑动窗口与不定长滑动窗口
数据结构·c++·算法
炸薯条!20 小时前
二叉树的链式表示(2)
java·数据结构·算法
YHHLAI21 小时前
JavaScript 数据结构精讲:数组底层与实战避坑
开发语言·javascript·数据结构
Coder-magician21 小时前
《代码随想录》刷题打卡day12:二叉树part02
数据结构·c++·算法