0328. Odd Even Linked List

0328. Odd Even Linked List #

题目 #

给定单链表头节点head,将所有索引为奇数的节点和所有索引为偶数的节点分别组合在一起,然后返回重新排序的链表。

第一个节点的索引被认为是奇数,第二个节点的索引被认为是偶数,以此类推。

偶数组和奇数组内部的相对顺序应该与输入时保持一致。

需要在O(1)的额外空间复杂度和O(n)的时间复杂度下解决这个问题。

思路 #

代码 #

public class ListNode {
    int val;
    ListNode next;
    ListNode() {}
    ListNode(int val) { this.val = val; }
    ListNode(int val, ListNode next) { this.val = val; this.next = next; }
}
class Solution {
    public ListNode oddEvenList(ListNode head) {
        if (head == null || head.next == null) return head;
        ListNode Odd = head, Even = head.next;
        ListNode ptrOdd = Odd, ptrEven = Even;
        while (ptrEven != null && ptrEven.next != null) {
            ptrOdd.next = ptrEven.next;
            ptrOdd = ptrOdd.next;
            ptrEven.next = ptrOdd.next;
            ptrEven = ptrEven.next;
        }
        ptrOdd.next = Even;
        return Odd;
    }
}