• LeetCode328奇偶链表


    题目链接

    https://leetcode-cn.com/problems/odd-even-linked-list/

    题解

    • 我自己写的
    • 思路是:首先建立两个链表(奇数号结点链表和偶数号结点链表),然后遍历整个链表并通过尾插法构造这两个链表,最后将偶数号结点链表连接到奇数号结点链表尾部即可。
    • 时间复杂度是(O(n)),空间复杂度是(O(1))
    • 具体思路见代码注释
    // Problem: LeetCode 328
    // URL: https://leetcode-cn.com/problems/odd-even-linked-list/
    // Tags: Linked List
    // Difficulty: Medium
    
    struct ListNode{
        int val;
        ListNode* next;
    };
    
    class Solution{
    public:
        ListNode* oddEvenList(ListNode* head) {
            // 处理0个、1个或者2个结点的情况
            if (head == nullptr || head->next == nullptr || head->next->next == nullptr)
                return head;
            // 奇数号结点链表首尾
            ListNode *oddHead = head, *oddTail = oddHead;
            // 偶数号结点链表首尾
            ListNode *evenHead = head->next, *evenTail = evenHead;
            // 当前结点是第奇数个还是偶数个,true则为第奇数个,false则为第偶数个
            bool oddFlag = true;
            // 从第三个结点开始遍历
            head = head->next->next;
            // 遍历链表,将链表分为奇数号结点链表和偶数号结点链表
            while(head != nullptr){
                if(oddFlag==true){
                    oddTail->next = head;
                    oddTail = oddTail->next;
                }
                else{
                    evenTail->next = head;
                    evenTail = evenTail->next;
                }
                oddFlag = !oddFlag;
                head = head->next;
            }
            // 连接奇数号结点链表和偶数号结点链表
            oddTail->next = evenHead;
            evenTail->next = nullptr;
            return oddHead;
        }
    };
    

    作者:@臭咸鱼

    转载请注明出处:https://www.cnblogs.com/chouxianyu/

    欢迎讨论和交流!


  • 相关阅读:
    MEP工作流程
    一盘很大的棋
    老人棒子鸡
    REVIT多专业协同设计
    不做没有理想的咸鱼
    卫生间排风设计规范
    如何时刻保持在目标的正确轨道上
    OGame殖民
    OGame舰队保护(FleetSave, FS)
    在局域网内架ESS3.0升级服务器
  • 原文地址:https://www.cnblogs.com/chouxianyu/p/13412810.html
Copyright © 2020-2023  润新知