我是 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;
}
}
上面代码的问题是,有时候程序会崩溃,但是我找不到错误!
另外,我接下来要做的是,如果某些节点具有相同的值,那么它们会根据它们的 id 进行排序(具有较小 ID 的节点首先出现)。我怎样才能做到这一点?我真的很困惑!