Список сортировки связанного спискаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Список сортировки связанного списка

Сообщение Anonymous »

/**
* Definition for singly-linked list.
* 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* sortList(ListNode* head) {
if(head == nullptr){
return head;
}
if(head->next == nullptr){
return head;
}
//Quicksort
int pivot = head->val;

//Numbers less than pivot
ListNode* less = new ListNode();

//Numbers more than pivot
ListNode* more = new ListNode();

//Resulting merged linked list
ListNode* result = new ListNode();

//Pointers
ListNode* headPtr = head;
ListNode* lessPtr = less;
ListNode* morePtr = more;
ListNode* resultPtr = result;

while(headPtr != nullptr){
if(headPtr->val > pivot){
morePtr->next = new ListNode(headPtr->val);
morePtr = morePtr->next;
}else{
lessPtr->next = new ListNode(headPtr->val);
lessPtr = lessPtr->next;
}
headPtr = headPtr->next;
}

ListNode* sortedLess = sortList(less->next);
ListNode* sortedMore = sortList(more->next);

resultPtr ->next = sortedLess;
resultPtr = resultPtr->next;
resultPtr ->next = new ListNode(pivot);
resultPtr = resultPtr->next;
resultPtr ->next = sortedMore;
resultPtr = resultPtr->next;
return result;
}
};
< /code>
Ошибка выходит: AddchSanitizer: Stack-overflow на адрес 0x7fff06c79fe8 (PC 0x55a5c16eedf0 bp 0x000000000001 sp 0x7fff06c79ff0 t0) < /p>
Идея: проблема на LeetCode, что для создания Artgor. O (nlogn) время для сортировки любого списка, в основном я использую QuickSort и адаптируя его к связанным спискам. Однако ошибка произошла
, пожалуйста, не могли бы вы объяснить, что я делаю не так, что можно улучшить, как исправить ошибку? (Я только начал изучать алгоритмы, так что не будьте строгим))

Подробнее здесь: https://stackoverflow.com/questions/796 ... inked-list
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»