Я пишу программу C для сортировки связанного списка в соответствии с наибольшими значениями. Я встретил проблему, когда программа просто зависала, когда программа достигла «prevPtr-> next = headPtr». Я хочу, чтобы prevPtr-> next приравнивался к headPtr, если сумма prevPtr больше суммы headPtr, однако программа просто висит там.Проблемы со связанными списками и указателями (C)
Функция compareNodes() используется для сравнения узлов, чтобы узнать, имеет ли newNode то же имя, что и любые другие структуры в связанном списке, а затем добавит сумму.
sortSimilarNodes() используется для сортировки узлов в соответствии с суммой каждой структуры.
структура здесь ниже:
struct purchase {
char name[30];
double sum;
struct purchase * next;
} ;
LOG * compareNodes(LOG * headPtr, char * name, char * price){
.
.
.
while (curPtr != NULL) {
if (strcmp(newNode->name, curPtr->name)==0) {
curPtr->sum += newNode->sum;
free(newNode);
similar = 1;
break;
}
//advance to next target
prevPtr = curPtr;
curPtr = curPtr->next;
}
/*if (curPtr == NULL){
if(strcmp(newNode->name, prevPtr->name)==0){
prevPtr->sum += newNode->sum;
free(newNode);
similar = 1;
}
}*/
if (similar == 1){
headPtr = sortSimilarNodes(curPtr, headPtr);
}
else{
headPtr = sortNodes(newNode, headPtr);
}
return headPtr;
}
LOG * sortSimilarNodes(LOG * newPtr, LOG * headPtr){
LOG * curPtr;
LOG * prevPtr;
if(headPtr->sum < newPtr->sum){
newPtr->next = headPtr;
return newPtr;
}
prevPtr = headPtr;
curPtr = headPtr->next;
while (curPtr == NULL){
}
while (curPtr != NULL){
if(strcmp(curPtr->name, newPtr->name)==0){
break;
}
prevPtr = curPtr;
curPtr = curPtr->next;
}
return headPtr;
}
This is the output of the program. Спасибо!
Что вы подразумеваете под "just hangs"? –
@o_weisman, когда я запускаю его в консоли, он переходит в оператор if, но он не работает с программой, и он просто зависает при задании указателя. – droptable
Во-первых, вы завершаете свой связанный список указателем NULL? Вы уверены, что ваш 'curPtr' в конечном итоге будет NULL. – Amjad