【发布时间】:2021-07-01 16:06:23
【问题描述】:
我正在尝试编写一个程序,我必须在其中删除和插入链接列表中的元素。 我在删除时和插入后遇到问题。 特别是如果我在删除插入后打印列表,我会打印一个循环。而且,如果我删除第一个元素,我认为我会删除整个列表。
这是两个函数,但我不知道问题出在哪里(对不起意大利的 cmets)
void delete_peer(struct node_peer** head, int value){
struct node_peer* temp;
struct node_peer* prev;
temp = head;
if(temp != NULL && temp->port == value){
head = temp->next;
free(temp);
temp = NULL;
return;
}
while(temp != NULL && temp->port != value){
prev = temp;
temp = temp->next;
}
//peer non presente
if(temp == NULL)
return;
prev->next = temp->next;
free(temp);
temp = NULL;
};
void insert_sort(struct node_peer* head, struct node_peer* new_peer){
//se la lista è vuota, o il peer ha il n° di porta piu piccolo tra quelli presenti
//allora inseriamo il nodo in testa
if(*head == NULL || (*head)->port >= new_peer->port) {
new_peer->next = *head;
*head = new_peer;
printf("Inserimento in testa\n");
return;
}
//altrimenti, inserisco all'interno della lista, oridnata per n° di porta dei peers
struct node_peer* current = *head;
while(current->next != NULL && current->next->port < new_peer->port)
current = current->next;
new_peer->next = current->next;
current->next = new_peer;
printf("Inserimento in mezzo\n");
return;
};
EDIT: I pass the *head instead of **head
【问题讨论】:
-
编译器将为此赋值 temp = head; 发出错误。所以你的代码不能编译。
-
这已经详细介绍了here。
-
@VladfromMoscow 编辑,我放了旧代码,现在可以编译了
-
请重新检查您的代码格式。此外,它应该是minimal reproducible example,即未经修改编译,因此包含任何必要的标头。作为这里的新用户,还请务必使用tour 并阅读How to Ask。
标签: c sorting struct singly-linked-list function-definition