diff options
| author | crupest <crupest@outlook.com> | 2020-08-26 23:47:14 +0800 | 
|---|---|---|
| committer | crupest <crupest@outlook.com> | 2020-08-26 23:47:14 +0800 | 
| commit | 3fe957fb772e60f8e04fb586dedae23ba71a938e (patch) | |
| tree | 17bd3505c4e4ff8eb53bd4272213cc0e8a6c8a6c /works/solutions/cpp | |
| parent | 4c473d407c39bb6cfae9e07e6bcb36a47b014b70 (diff) | |
| download | crupest-3fe957fb772e60f8e04fb586dedae23ba71a938e.tar.gz crupest-3fe957fb772e60f8e04fb586dedae23ba71a938e.tar.bz2 crupest-3fe957fb772e60f8e04fb586dedae23ba71a938e.zip  | |
import(solutions): Add problem 147 .
Diffstat (limited to 'works/solutions/cpp')
| -rw-r--r-- | works/solutions/cpp/147.cpp | 56 | 
1 files changed, 56 insertions, 0 deletions
diff --git a/works/solutions/cpp/147.cpp b/works/solutions/cpp/147.cpp new file mode 100644 index 0000000..c741290 --- /dev/null +++ b/works/solutions/cpp/147.cpp @@ -0,0 +1,56 @@ +#include <cstddef>
 +
 +struct ListNode
 +{
 +    int val;
 +    ListNode *next;
 +    ListNode(int x) : val(x), next(NULL) {}
 +};
 +
 +class Solution
 +{
 +public:
 +    ListNode *insertionSortList(ListNode *head)
 +    {
 +        if (head == NULL)
 +            return NULL;
 +        if (head->next == NULL)
 +            return head;
 +
 +        ListNode *next_sort = head->next;
 +
 +        head->next = nullptr;
 +
 +        while (next_sort != nullptr)
 +        {
 +            ListNode *current_sort = next_sort;
 +            next_sort = current_sort->next;
 +
 +            ListNode *prev = nullptr;
 +            ListNode *current = head;
 +
 +            int i = 0;
 +
 +            while (current != nullptr && current->val < current_sort->val)
 +            {
 +                i++;
 +                prev = current;
 +                current = current->next;
 +            }
 +
 +            if (prev == nullptr)
 +            {
 +                current_sort->next = head;
 +                head = current_sort;
 +            }
 +            else
 +            {
 +                ListNode *prev_next = prev->next;
 +                prev->next = current_sort;
 +                current_sort->next = prev_next;
 +            }
 +        }
 +
 +        return head;
 +    }
 +};
  | 
