1. 程式人生 > >【LeetCode】【328】【Odd Even Linked List】【連結串列】

【LeetCode】【328】【Odd Even Linked List】【連結串列】

題目:Given a singly linked list, group all odd nodes together followed by the even nodes. Please note here we are talking about the node number and not the value in the nodes.

You should try to do it in place. The program should run in O(1) space complexity and O(nodes) time complexity.

Example 1:

Input: 1->2->3->4->5->NULL
Output: 1->3->5->2->4->NULL

解題思路:這個題目的意思是把奇數號位置的節點放在偶數號位置之前(不要誤理解成節點值為奇數)

    public ListNode oddEvenList(ListNode head) {
        if (head == null) return null;
        ListNode oddNode = head;
        ListNode evenNode = head.next;
        ListNode evenStart = head.next;    //記一下偶數位的開始節點
        while (evenNode!=null && evenNode.next!=null){
            oddNode.next = evenNode.next;
            oddNode = oddNode.next;
            evenNode.next = oddNode.next;
            evenNode = evenNode.next;
        }
        oddNode.next = evenStart;  //最後一位是偶數位,自動最後是空指標
        return head;
    }