2013-10-03 8 views
1

Я злюсь с бесконечным циклом, как вы думаете, подходящее решение?Сортировка связанного списка в C++

void sorting() { 
    node * temphead = head; 
    node * tempnode = NULL; 

    for (int i=0; i<count; i++) { 
    for (int j=0; j<count-i; j++) { 
     if (temphead->data > temphead->next->data) { 
     tempnode = temphead; 
     temphead = temphead->next; 
     temphead->next = tempnode; 
     } 

     temphead=temphead->next; 
     count++; 
    } 
    } 
} 

Я пытался увеличивать количество и перед использованием многих условий с while- и после того, как цикл без результата

ответ

3

простой способ скользить через связанный список, как это:

for (node *current = head; current != nullptr; current = current->next) { 
    // This will run through all of the nodes until we reach the end. 
} 

И скользить к SECON d к последнему пункту (гарантируя, что node->next существует) выглядит следующим образом:

for (node *current = head; current->next != nullptr; current = current->next) { 
    // Go through all of the nodes that have a 'next' node. 
} 

Если вы хотите, чтобы подсчитать, сколько элементов в связанном списке, вы делаете что-то вроде этого:

int count = 0; 
for (node *current = head; current != nullptr; current = current->next) { 
    count = count + 1; 
} 

Так выбор типа сортировки, как у вас выше, будет выглядеть следующим образом:

for (node *index = head; index->next != nullptr; index = index->next) { 
    for (node *selection = index->next; selection != nullptr; selection = selection->next) { 
    if (index->data > selection->data) { 
     swap(index->data, selection->data); 
    } 
    } 
} 

Хотя сортировка связанных списков, как правило, не лучший путь (если вы не выполняет слияние).

+0

Я получил его, и это то, что мне действительно нужно, но когда я печатаю это на экране, все еще не сортируется :(Спасибо за совет. –

+0

Хм .. Я сделал это из памяти, Я буду отлаживать его и быстро скопировать рабочую версию. – sircodesalot

+0

Исправлено. Вместо того, чтобы менять сами узлы, я просто поменял данные. – sircodesalot

2

проблемы вы зацикливание до подсчета и вы увеличивающееся количество в каждом пробеге цикл // удалить количество строк ++, чтобы избежать удаления бесконечного цикла

+0

Похоже, он хочет перебрать список (по счету) и подсчитать элементы в одном цикле :). – Slava

+0

должен иметь повторяющиеся переменные count, такие как count1, затем (или лучше переименовывать как размер и количество), если вы пытаетесь сделать что @Slava говорит, что –

+0

удаление счета не работает –

Смежные вопросы