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

执行结果

相关推荐
汀、人工智能8 小时前
[特殊字符] 第40课:二叉树最大深度
数据结构·算法·数据库架构·图论·bfs·二叉树最大深度
赫瑞8 小时前
数据结构中的排列组合 —— Java实现
java·开发语言·数据结构
大熊背9 小时前
ISP Pipeline中Lv实现方式探究之三--lv计算定点实现
数据结构·算法·自动曝光·lv·isppipeline
yuannl1013 小时前
数据结构----队列的实现
数据结构
Mr_Xuhhh13 小时前
从ArrayList到LinkedList:理解链表,掌握Java集合的另一种选择
java·数据结构·链表
Ricardo-Yang15 小时前
SCNP语义分割边缘logits策略
数据结构·人工智能·python·深度学习·算法
soragui15 小时前
【Python】第 4 章:Python 数据结构实现
数据结构·windows·python
samroom16 小时前
【鸿蒙应用开发 Dev ECO Studio 5.0版本】从0到1!从无到有!最全!计算器------按钮动画、滑动退格、中缀表达式转后缀表达式、UI设计
数据结构·ui·华为·typescript·harmonyos·鸿蒙
算法鑫探16 小时前
10个数下标排序:最大值、最小值与平均值(下)
c语言·数据结构·算法·排序算法·新人首发
王老师青少年编程16 小时前
csp信奥赛c++之状压枚举
数据结构·c++·算法·csp·信奥赛·csp-s·状压枚举