From 93a4aef31b3012a4a0938a557c88e2a09032ea98 Mon Sep 17 00:00:00 2001 From: crupest Date: Wed, 5 Aug 2020 16:49:09 +0800 Subject: import(solutions): Add problem 328. --- works/solutions/cpp/328.cpp | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 works/solutions/cpp/328.cpp (limited to 'works/solutions/cpp/328.cpp') diff --git a/works/solutions/cpp/328.cpp b/works/solutions/cpp/328.cpp new file mode 100644 index 0000000..de3ad0b --- /dev/null +++ b/works/solutions/cpp/328.cpp @@ -0,0 +1,51 @@ +struct ListNode +{ + int val; + ListNode *next; + ListNode() : val(0), next(nullptr) {} + ListNode(int x) : val(x), next(nullptr) {} + ListNode(int x, ListNode *next) : val(x), next(next) {} +}; + +class Solution +{ +public: + ListNode *oddEvenList(ListNode *head) + { + if (head == nullptr) + return nullptr; + + if (head->next == nullptr) + return head; + + ListNode *odd_head = head; + head = head->next; + ListNode *even_head = head; + head = head->next; + + ListNode *odd_current = odd_head; + ListNode *even_current = even_head; + + bool odd = true; + while (head != nullptr) + { + if (odd) + { + odd_current->next = head; + odd_current = head; + } + else + { + even_current->next = head; + even_current = head; + } + head = head->next; + odd = !odd; + } + + odd_current->next = even_head; + even_current->next = nullptr; + + return odd_head; + } +}; -- cgit v1.2.3