Làm cách nào để xóa nút khỏi danh sách được liên kết?C Xóa nút khỏi danh sách được liên kết
Đây là mã của tôi:
void RemoveNode(Node * node, Node ** head) {
if (strcmp(node->state, (*(*head)->next).state) == 0) {
Node * temp = *head;
*head = (*head)->next;
free(temp);
return;
}
Node * current = (*head)->next;
Node * previous = *head;
while (current != NULL && previous != NULL) {
if (strcmp(node->state, (*current->next).state) == 0) {
Node * temp = current;
previous->next = current->next;
free(temp);
return;
}
current = current->next;
previous = previous->next;
}
return;
}
Nhưng tôi cứ bị lỗi seg.
Tôi cảm thấy như tôi đang làm điều gì đó ngu ngốc .... Bất kỳ ý tưởng nào?
Tại sao 'trước = trước-> tiếp theo' thay vì chỉ« previous = current' trước khi chuyển nhượng lại hiện tại? –
Ngoài ra, nếu bạn nhận được lỗi phân đoạn, hãy chạy chương trình của bạn trong trình gỡ lỗi. Nó sẽ dừng lại nơi bạn có vấn đề của bạn, và cho phép bạn kiểm tra các callstack và các biến. Ít nhất bạn nên chỉnh sửa câu hỏi của bạn để bao gồm các callstack, và chỉ ra nơi trong mã được cung cấp vụ tai nạn xảy ra. –
Ngoài ra, bạn * luôn luôn * có một con trỏ '(* head) -> next' hợp lệ không? Điều gì xảy ra nếu danh sách trống? Điều gì sẽ xảy ra nếu chỉ có một nút trong danh sách? –