Я новичок в C, так что будьте терпеливы со мной, если увидите в моем коде действительно новичок!
Как часть домашней работы, мне нужно создать упорядоченный список для хранения некоторых данных. На данный момент я создал структуру, которая будет представлять каждый узел списка (firstNode - это глобальная переменная, которая указывает на первый узел списка):
typedef struct Node {
struct Node *next;
int id;
int value;
}Node;
Node *firstNode = NULL;
После этого я создал функцию, которая вставляет новый узел в список, проверяя значения узлов. Узлы с меньшими значениями должны быть раньше других. Так что я сделал это:
void addNewNode(int nodeId, int nodeValue) {
Node *newNode = (Node*) malloc(sizeof(Node));
Node *temp, *tempPrev;
newNode->id = nodeId;
newNode->value = nodeValue;
if(firstNode == NULL) {
newNode->next = firstNode;
firstNode = newNode;
}
temp = firstNode;
tempPrev = NULL;
while(temp->value < newNode->value) {
tempPrev = temp;
temp = temp->next;
}
if(tempPrev == NULL) {
newNode->next = firstNode;
firstNode = newNode;
}
else {
tempPrev->next = newNode;
newNode->next = temp;
}
}
Проблема с кодом выше заключается в том, что иногда происходит сбой программы, но я не могу найти ошибку!
Кроме того, я пытаюсь сделать следующее: если некоторые узлы имеют одинаковое значение, они упорядочиваются в соответствии с их идентификатором (сначала идут узлы с меньшими идентификаторами). Как я могу это сделать? Я действительно запутался!