• 【LeetCode】328. 奇偶链表


    328. 奇偶链表(中等)

    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    思路

    • 如果链表为空,则直接返回链表。

    • 对于原始链表,每个节点都是奇数节点或偶数节点。头节点是奇数节点,头节点的后一个节点是偶数节点,相邻节点的奇偶性不同。因此可以将奇数节点和偶数节点分离成奇数链表和偶数链表,然后将偶数链表连接在奇数链表之后,合并后的链表即为结果链表。

    • 原始链表的头节点 head 也是奇数链表的头节点以及结果链表的头节点,head 的后一个节点是偶数链表的头节点。令 evenHead = head->next,则 evenHead 是偶数链表的头节点。

    • 维护两个指针 odd 和 even 分别指向奇数节点和偶数节点,初始时 odd = head,even = evenHead。通过迭代的方式将奇数节点和偶数节点分离成两个链表,每一步首先更新奇数节点,然后更新偶数节点。

    • 在上述操作之后,即完成了对一个奇数节点和一个偶数节点的分离。重复上述操作,直到全部节点分离完毕。全部节点分离完毕的条件是 even 为空节点或者 even->next 为空节点,此时 odd 指向最后一个奇数节点(即奇数链表的最后一个节点)。

    • 最后令 odd->next = evenHead,将偶数链表连接在奇数链表之后,即完成了奇数链表和偶数链表的合并,结果链表的头节点仍然是 head。

    代码

    /**
     * Definition for singly-linked list.
     * struct ListNode {
     *     int val;
     *     ListNode *next;
     *     ListNode() : val(0), next(nullptr) {}
     *     ListNode(int x) : val(x), next(nullptr) {}
     *     ListNode(int x, ListNode *next) : val(x), next(next) {}
     * };
     */
    class Solution {
    public:
        ListNode* oddEvenList(ListNode* head) {
            if(!head) return head;
            ListNode *EvenHead = head->next;
            ListNode *odd = head, *even = head->next;
            while(odd && even && odd->next && even->next) {
                odd->next = even->next;
                even->next = even->next->next;
                odd = odd->next;
                even = even->next;
            }
            odd->next = EvenHead;
            return head;
        }
    };
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    参考资料

    1. 力扣官方题解
  • 相关阅读:
    LeetCode【42. 接雨水】
    vue2 + element-ui,前端配置化表单封装(2024-06-14)
    NUCLEO-L552ZE SWD外部接口定义
    【OceanBase】四种不同的数据迁移方式
    echarts+node+ajax实现时间天气服务器
    深度学习之路=====9=====>>MobileNet(tensorflow2)
    什么是物理信息系统(cps)?
    android 逆向去广告工具和流程
    Android开发笔记——快速入门 (延迟初始与Viewbinding)
    408计算机网络知识点简记 (背诵用
  • 原文地址:https://blog.csdn.net/weixin_43894455/article/details/132673815