1. 程式人生 > >把一個連結串列的奇數和偶數分開

把一個連結串列的奇數和偶數分開

給你一個單鏈表,修改此單鏈表,使得前面是偶數,後面是奇數。偶數間的相對順序不變,奇數間的相對順序不變。返回修改後的單鏈表的頭節點。

例如:

Input: 17->15->8->12->10->5->4->1->7->6->NULL
Output: 8->12->10->4->6->17->15->5->1->7->NULL

ListNode* divideList(ListNode* head) {
    if (head == NULL) return head;
    ListNode *p1 = head;
    ListNode *p2 = NULL;
    while (p1 && p1->data % 2 == 0) p1 = p1->next;
    if (p1 == NULL) return head;
    p2 = p1->next;
    while (p2) {
        if (p2->data % 2 == 0) {
            swap(p2->data, p1->data);
            p1 = p1->next;
        }
        p2 = p2->next;
    }
    return head;
}