1. 程式人生 > 實用技巧 >面試題:對NotNull欄位插入Null值 有啥現象?

面試題:對NotNull欄位插入Null值 有啥現象?

給定一個單鏈表,把所有的奇數節點和偶數節點分別排在一起。請注意,這裡的奇數節點和偶數節點指的是節點編號的奇偶性,而不是節點的值的奇偶性。
請嘗試使用原地演算法完成。你的演算法的空間複雜度應為 O(1),時間複雜度應為 O(nodes),nodes 為節點總數

輸入: 1->2->3->4->5->NULL
輸出: 1->3->5->2->4->NULL
/**
 * Definition for singly-linked list.
 * 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
            return head;
        ListNode evenHead = head.next; //偶數鏈的頭節點
        ListNode odd=head,even=evenHead; // 兩個指標分別指向奇數節點和偶數節點
        while(even!=null&&even.next!=null){ // 當偶數節點為空或者偶數節點的下一個節點為空時 while結束
            odd.next = even.next;  //odd 指向 even的下一個節點(奇數節點) 
            odd = odd.next;   //odd後移 (even的下一個節點)
            even.next = odd.next; // even指向 odd的下一個節點(偶數節點)
            even = even.next;  //even後移 (odd的下一個節點)
        }
        odd.next = evenHead; //將偶數連結到奇數鏈後
        return head;
    }
}