Я пишу алгоритм, который будет сортировать связанный список.Однако я сталкиваюсь с проблемами, когда кажется, что цикл while завершился, но ни один из следующего кода не запустился.Я вполне могу ошибаться по поводу завершения цикла while, но согласно моим распечаткам условие для цикла while (cur! = NULL) выполнено.
void LL_sort (struct node **headpp){
//if list is null or size 1
if((*headpp)==NULL || (*headpp)->next ==NULL){
return;
}
struct node* sortedHead = NULL;
struct node* sortedCur = NULL;
struct node* cur = *headpp;
struct node* fwd = (*headpp)->next;
int emptyflag = 0;
while(cur!=NULL){
fwd=cur->next;
printf("start of loop cur is %p wtih value %i\n", cur, cur->data);
printf("start of loop fwd is %p\n", fwd);
//if sorted list is empty
if(sortedHead == NULL){
cur->next = NULL;
sortedHead = cur;
emptyflag = 1;
printf("[sorted list NULL]sorted head is %p with value %i\n", sortedHead, sortedHead->data );
printf("[sorted list NULL]reg head is %p with value %i\n", *headpp, (*headpp)->data );
}
//if cur is smaller than head
if(sortedHead->data >= cur->data && emptyflag==0){
cur->next = sortedHead;
sortedHead = cur;
printf("[sortedHead change]sorted head is %p with value %i\n", sortedHead, sortedHead->data );
printf("[sortedHead change]reg head is %p with value %i\n", *headpp, (*headpp)->data );
}
sortedCur=sortedHead;
printf("sortedCur is %p with value %i\n",sortedCur, sortedCur->data );
printf("sortedCur->next is %p \n",sortedCur->next );
printf("sortedhead is %p with value %i\n",sortedHead, sortedHead->data );
printf("sortedHead->next is %p \n",sortedHead->next );
while((sortedCur->next!=NULL) && (sortedCur->data < cur->data)){
sortedCur=sortedCur->next;
}
if(sortedCur->next == NULL && emptyflag ==0){
sortedCur->next = cur;
sortedCur->next = NULL;
}
if(sortedCur->data < cur->data && emptyflag ==0){
sortedCur->next = cur;
cur->next = sortedCur->next->next;
}
emptyflag=0;
cur = fwd;
printf("end of loop cur is %p\n", cur);
printf("end of loop cur has value %i\n", cur->data);
printf("end of loop sortedHead is %p\n", sortedHead);
printf("end of loop sortedHead has value %i\n", sortedHead->data);
printf("end of loop sortedHead->next is %p \n", sortedHead->next);
printf(" -------------------------------------------------- \n");
}
printf("this won't print\n");
*headpp=sortedHead;
}
Я ожидал, что цикл завершится, и заголовок связанного списка будет изменен на отсортированный, так что любые последующие функции, вызывающие этот список, приведут к отсортированному списку.