leetcode328. Odd Even Linked List

Given the head of a singly linked list, group all the nodes with odd indices together followed by the nodes with even indices, and return the reordered list.

The first node is considered odd, and the second node is even, and so on.

Note that the relative order inside both the even and odd groups should remain as it was in the input.

You must solve the problem in O(1) extra space complexity and O(n) time complexity.

给定单链表的头节点 head ,将所有索引为奇数的节点和索引为偶数的节点分别组合在一起,然后返回重新排序的列表。

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

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

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

思路:

如果是空链表,evenList 的初始节点就不存在,因此特殊处理,直接返回;

初始化奇数索引节点链表oddList初始化为头节点,偶数索引节点链表evenList初始化为次节点;

记录偶数索引节点链表头节点 evenList,用于之后的拼接;【奇数索引节点的头节点就是 head,不需要在额外记录了】

更新奇偶索引链表的节点;

最后一个奇数索引节点和首个偶数索引节点拼接起来;

返回头节点 head;

python 复制代码
class Solution:
    def oddEvenList(self, head: Optional[ListNode]) -> Optional[ListNode]:
        if not head: return head   # 空链表,直接返回
        odd_list = head          # 奇数索引节点链表odd_list初始化为头节点
        even_list = head.next    # 偶数索引节点链表even_list初始化为次节点
        even_head = even_list     # 记录偶数索引节点链表头节点
        # 当前偶数节点不为空且当前偶数节点之后还有节点
        while even_list and even_list.next:
            odd_list.next = even_list.next     # 下一个奇数索引节点是当前偶数索引节点的下一个节点
            odd_list = odd_list.next            # 更新当前奇数索引节点
            even_list.next = odd_list.next     # 下一个偶数索引节点是新的奇数索引节点的下一个节点
            even_list = even_list.next          # 更新偶数索引节点
        odd_list.next = even_head   # 最后一个奇数索引节点和首个偶数索引节点拼接起来
        return head
相关推荐
foundbug9991 小时前
基于混合整数规划的电池容量优化 - MATLAB实现
数据结构·算法·matlab
memcpy03 小时前
LeetCode 2452. 距离字典两次编辑以内的单词【暴力;字典树】中等
算法·leetcode·职场和发展
王老师青少年编程3 小时前
csp信奥赛C++高频考点专项训练之贪心算法 --【排序贪心】:魔法
c++·算法·贪心·csp·信奥赛·排序贪心·魔法
wearegogog1233 小时前
基于和差波束法的单脉冲测角MATLAB实现
人工智能·算法·matlab
AI科技星3 小时前
灵魂商数(SQ) · 全域数学统一定义【乖乖数学】
算法·机器学习·数学建模·数据挖掘·量子计算
晓觉儿3 小时前
【GPLT】2026年第十一届团队程序设计天梯赛赛后题解(已写2h,存档中)
数据结构·c++·算法·深度优先·图论
We་ct3 小时前
LeetCode 322. 零钱兑换:动态规划入门实战
前端·算法·leetcode·typescript·动态规划
6Hzlia4 小时前
【Hot 100 刷题计划】 LeetCode 394. 字符串解码 | C++ 单栈回压法
c++·算法·leetcode
穿条秋裤到处跑4 小时前
每日一道leetcode(2026.04.22):距离字典两次编辑以内的单词
算法·leetcode
淘矿人4 小时前
Claude辅助算法设计与优化
人工智能·python·算法·microsoft·github·bug·pygame