我的insert方法有问题,因为某种原因,我最终使用了无限循环。这是我的结构:
struct List {
char element;
struct List *next;
};
这是我的插入方法:
void insert(struct List *first, char el){
struct List *new=NULL;
struct List *current = first;
new = (struct List*) malloc (sizeof(struct List));
new->element = el;
new->next = NULL;
if (first == NULL){
first = new;
return;
}
while (1){ //this loop never ends
if (current->next == NULL) break;
if (current->next->element < el){
current = current->next;
}else{
break;
}
}
struct List *ex_next = current->next;
current->next = new;
new->next = ex_next;
}
我知道这里有类似的问题:C-按升序插入链表,但这并没有真正帮助我。
insert
的第一个参数是指针。但是您需要一个指向指针(struct List **first
)的指针。
如果列表为空,则将VALUENULL传递到函数中(方法中的变量first
的值为NULL)。然后为其分配一个新的mallocated值并返回。调用端的变量没有更改,您的内存泄漏。
当您传递指针的指针时,变量first
保存调用方法的变量的地址。通过这种方式,您可以重新分配它的值。
指针,指针的指针,返回函数指针的函数数组的指针的指针。。。。这就是C的有趣之处;)