Tôi mới sử dụng C nên hãy kiên nhẫn với tôi nếu bạn thấy một số lỗi mới của người mới trong mã của tôi!C: Tạo danh sách theo thứ tự bằng cách kiểm tra 2 giá trị
Là một phần của bài tập về nhà, tôi cần tạo danh sách theo thứ tự để lưu trữ một số dữ liệu. Những gì tôi đã làm cho đến nay là tạo cấu trúc sẽ đại diện cho mỗi nút của danh sách (firstNode là một biến toàn cục trỏ đến nút đầu tiên của danh sách):
typedef struct Node {
struct Node *next;
int id;
int value;
}Node;
Node *firstNode = NULL;
Sau đó tôi đã tạo một hàm chèn một nút mới vào danh sách bằng cách kiểm tra các giá trị của các nút. Các nút có giá trị nhỏ hơn phải được đặt trước các giá trị khác. Vì vậy, những gì tôi đã làm là:
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;
}
}
Vấn đề với mã ở trên đôi khi chương trình gặp sự cố, nhưng tôi không thể tìm thấy lỗi!
Ngoài ra, những gì tôi đang cố gắng làm tiếp theo là, nếu một số nút có cùng giá trị, thì chúng được sắp xếp theo id của chúng (các nút có ID nhỏ hơn đến trước). Tôi có thể làm cái này như thế nào? Tôi thực sự bối rối!
Có, tôi đã hiểu sai khi tôi viết mã cho câu hỏi. Tôi có newNode-> giá trị trong mã ban đầu của tôi! Mã được biên dịch và chạy hoàn toàn! Tôi sẽ chỉnh sửa nó! –