leetcode328.奇偶链表

1. 题目描述

在线练习

在这里插入图片描述

2. 解题思路

这道题,官方给的是中等难度。其实是一道基础题,大家应该都可以写得出来。

题目中给的示例可以清楚的看到,合并前后的奇偶链的各自包含的节点的顺序是不变的,我们基本可以确定使用尾插法来合并链表。使用尾插法的时候需要注意需要使用一个tail指针来记录尾节点的更新,并且最后要注意将最终合并的链的尾节点的next置空,防止有链循环。

首先,我们需要考虑特殊情况,即输入的链表为空或只有一个节点,直接返回原链表即可。

然后,我们创建两个虚拟头节点 oddHead 和 evenHead 分别用于存放奇数位置节点和偶数位置节点的链表。同时,使用 oddTail 和 evenTail 分别表示奇数位置链表和偶数位置链表的尾节点,初始时与虚拟头节点相同。

接下来,我们遍历原始链表 head,使用 count 变量来标识当前节点的位置,从第一个节点开始计数。

如果当前节点是奇数位置(即 count % 2 == 1),将其连接到奇数位置链表的尾部,并更新 oddTail 指向新的尾节点。
如果当前节点是偶数位置(即 count % 2 == 0),将其连接到偶数位置链表的尾部,并更新 evenTail 指向新的尾节点。

最后,将偶数位置链表的头节点连接到奇数位置链表的尾部,然后断开偶数位置链表的尾节点,避免形成循环。最终返回奇数位置链表的头节点 oddHead.next,即为重新组织后的链表。

3. 代码

public ListNode oddEvenList(ListNode head) {
        if (head == null || head.next == null) {
            return head; // 链表为空或只有一个节点,直接返回
        }

        ListNode oddHead = new ListNode(-1); // 奇数位置链表的虚拟头节点
        ListNode evenHead = new ListNode(-1); // 偶数位置链表的虚拟头节点
        ListNode oddTail = oddHead; // 奇数位置链表的尾节点
        ListNode evenTail = evenHead; // 偶数位置链表的尾节点
        int count = 1;

        ListNode curr = head;
        while (curr != null) {
            if (count % 2 == 1) { // 奇数位置节点
                oddTail.next = curr;
                oddTail = oddTail.next;
            } else { // 偶数位置节点
                evenTail.next = curr;
                evenTail = evenTail.next;
            }
            curr = curr.next;
            count++;
        }

        // 将偶数位置链表连接到奇数位置链表后面
        oddTail.next = evenHead.next;
        // 断开偶数位置链表的尾节点,避免循环
        evenTail.next = null;

        return oddHead.next; // 返回奇数位置链表的头节点
    }

相关推荐

  1. 重排

    2024-04-12 08:48:05       38 阅读
  2. 交换

    2024-04-12 08:48:05       34 阅读
  3. 交换排序

    2024-04-12 08:48:05       30 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-12 08:48:05       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-12 08:48:05       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-12 08:48:05       82 阅读
  4. Python语言-面向对象

    2024-04-12 08:48:05       91 阅读

热门阅读

  1. GitHub 与 Git 的区别

    2024-04-12 08:48:05       45 阅读
  2. STM32 文档整理

    2024-04-12 08:48:05       30 阅读
  3. 【gitlab】修改默认存放存放目录

    2024-04-12 08:48:05       197 阅读
  4. 数据湖/数据仓库

    2024-04-12 08:48:05       37 阅读
  5. MVC和MVVM这两种设计模式的区别

    2024-04-12 08:48:05       39 阅读
  6. [大模型]Atom-7B-chat 全量微调

    2024-04-12 08:48:05       43 阅读
  7. [C++11] nullptr完整解析

    2024-04-12 08:48:05       37 阅读
  8. 数据结构-单调队列

    2024-04-12 08:48:05       39 阅读