From dc1f0c4c0096013799416664894c5194dc7e1f52 Mon Sep 17 00:00:00 2001 From: Yuqian Yang Date: Fri, 28 Feb 2025 23:13:39 +0800 Subject: chore(store): move everything to store. --- store/works/solutions/leetcode/cpp/86.cpp | 80 +++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 store/works/solutions/leetcode/cpp/86.cpp (limited to 'store/works/solutions/leetcode/cpp/86.cpp') diff --git a/store/works/solutions/leetcode/cpp/86.cpp b/store/works/solutions/leetcode/cpp/86.cpp new file mode 100644 index 0000000..1f7568c --- /dev/null +++ b/store/works/solutions/leetcode/cpp/86.cpp @@ -0,0 +1,80 @@ +/** + * Definition for singly-linked list. + * struct ListNode { + * int val; + * ListNode *next; + * ListNode(int x) : val(x), next(NULL) {} + * }; + */ + +struct ListNode +{ + int val; + ListNode *next; + ListNode(int x) : val(x), next(nullptr) {} +}; + +class Solution +{ +public: + ListNode *partition(ListNode *head, int x) + { + if (head == nullptr) + return nullptr; + + if (head->next == nullptr) + { + return head; + } + + ListNode less_list_head(0); + ListNode greater_list_head(0); + + ListNode *less_list_tail = &less_list_head; + ListNode *greater_list_tail = &greater_list_head; + + auto current_head = head; + auto prev = head; + auto current = head->next; + bool less = head->val < x; + + while (current != nullptr) + { + const bool current_less = (current->val < x); + if (less != current_less) + { + if (less) + { + less_list_tail->next = current_head; + less_list_tail = prev; + } + else + { + greater_list_tail->next = current_head; + greater_list_tail = prev; + } + + less = current_less; + current_head = current; + } + prev = current; + current = current->next; + } + + if (less) + { + less_list_tail->next = current_head; + less_list_tail = prev; + } + else + { + greater_list_tail->next = current_head; + greater_list_tail = prev; + } + + less_list_tail->next = greater_list_head.next; + greater_list_tail->next = nullptr; + + return less_list_head.next; + } +}; \ No newline at end of file -- cgit v1.2.3