松原市网站建设_网站建设公司_加载速度优化_seo优化
2026/1/15 8:35:13 网站建设 项目流程

思路分析

  1. 用两个指针分别指向「奇数链的尾节点」(odd)和「偶数链的尾节点」(even);
  2. 遍历链表,依次将奇数节点接入奇数链、偶数节点接入偶数链;
  3. 遍历结束后,将偶数链的头节点拼接到奇数链的尾部,完成重排。

步骤拆解(以1→2→3→4→5→null为例)

  1. 初始化:
    • odd = head(奇数链头 / 尾,初始为位置 1 的节点);
    • even = head.next(偶数链头 / 尾,初始为位置 2 的节点);
    • evenHead = even(保存偶数链的头节点,用于最后拼接);
  2. 遍历链表(终止条件:even == null 或 even.next == null):
    • 奇数链后移:odd.next = even.next → odd = odd.next(odd 从 1→3);
    • 偶数链后移:even.next = odd.next → even = even.next(even 从 2→4);
  3. 拼接:odd.next = evenHead(将偶数链拼到奇数链尾部);
  4. 返回原头节点head(奇数链头就是最终链表头)。

代码实现

publicListNodeoddEvenList(ListNodehead){// 边界条件:空链表 或 只有一个节点,直接返回if(head==null||head.next==null){returnhead;}// 1. 初始化指针ListNodeodd=head;// 奇数链尾指针(初始为位置1)ListNodeeven=head.next;// 偶数链尾指针(初始为位置2)ListNodeevenHead=even;// 保存偶数链的头节点(关键:最后拼接用)// 2. 遍历分离奇偶链(终止条件:even为空 或 even.next为空)while(even!=null&&even.next!=null){// 奇数链后移:接下一个奇数节点(even.next是位置3)odd.next=even.next;odd=odd.next;// 偶数链后移:接下一个偶数节点(odd.next是位置4)even.next=odd.next;even=even.next;}// 3. 拼接:偶数链拼到奇数链尾部odd.next=evenHead;// 4. 返回原头节点(奇数链头就是最终头)returnhead;}

复杂度分析

  • 空间复杂度 O (1),仅用了额外的指针变量;
  • 时间复杂度:O (n),每个节点仅遍历一次。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询