解题思路


这题主要运用了双指针之间的交替,画图理解的话就很简单了:

https://picgo.cn-sy1.rains3.com/2024/11/87823ee9b86e66d33d41cd2630aa7b15.png

实现代码


class Solution {
    public ListNode oddEvenList(ListNode head) {
        if (head == null) return head;
        ListNode evenHead = head.next; // 偶数头
        ListNode odd = head, even = evenHead; // 基数 偶数
        while (even != null && even.next != null) {
            odd.next = even.next;
            odd = odd.next;
            even.next = odd.next;
            even = even.next;
        }
        odd.next = evenHead;
        return head;
    }
}

复杂度分析


  • 时间复杂度:O(N)
  • 空间复杂度:O(1)