0

我正在尝试一个 leetcode 问题 328。奇偶链表。我们需要重新排列下面的列表,将所有奇数节点放在一起,将偶数节点放在一起。例如:

1->7->3->2->4

然后需要重新排列它们以将奇数与奇数联系起来,然后在最后添加偶数

1 3 4 7 2

但是我的问题是,在处理偶数个节点的列表时,它会将最后一个偶数留在奇数的末尾,例如

5 7 4 3 9 8 2 1

我的代码将其重新排列为

5 4 9 2 1 7 3 8 

但答案应该是

5 4 9 2 7 3 8 1

我如何修复代码以将最后一个偶数视为偶数而不是奇数?

if (head->next == NULL || head->next->next == NULL)
      return head;

    ListNode *odd = head;
    ListNode *even = head->next;
    ListNode *evenHead = even;

    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;
}
4

1 回答 1

0

看起来不错!差不多好了!

  • 这会通过:
// The following block might slightly improve the execution time;
// Can be removed;
static const auto __optimize__ = []() {
    std::ios::sync_with_stdio(false);
    std::cin.tie(nullptr);
    std::cout.tie(nullptr);
    return 0;
}();


static const struct Solution {
    ListNode* oddEvenList(ListNode* head) {
        if (!head) {
            return head;
        }

        ListNode* odd = head;
        ListNode* even_head = head->next;
        ListNode* even = even_head;

        while (even && even->next) {
            odd->next = odd->next->next;
            even->next = even->next->next;
            odd = odd->next;
            even = even->next;
        }

        odd->next = even_head;

        return head;
    }
};


  • c++变量命名通常是snake_case. 不过,始终使用其他样式是可以的。
于 2020-10-20T13:58:32.597 回答