微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在最后一个节点中使“奇数偶数LinkedList”成为可能? 看起来不错!差不多了!

如何解决如何在最后一个节点中使“奇数偶数LinkedList”成为可能? 看起来不错!差不多了!

我正在尝试一个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;
}

解决方法

看起来不错!差不多了!

  • 这会通过:
// 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。可以始终使用其他样式。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。