我正在尝试反向链接列表,并返回反向列表。
typedef struct lligada
{
int valor;
struct lligada *prox;
} *LInt;
这是我的功能:
LInt reverseL (LInt l){
LInt aux = malloc (sizeof(struct lligada));
if(l != NULL){
while( l -> prox != NULL){
aux = l-> prox;
aux -> prox = l;
l = l-> prox;
}
}
else return NULL;
return aux;
}
能帮我吗?
我尝试这样做:
if(l != NULL){
if(l -> prox == NULL) {
aux = l;
}
else{
while( l -> prox != NULL){
aux = l-> prox;
aux -> prox = l;
l = l-> prox;
}
aux -> prox = l;
}
}
这是个好主意吗?
答案 0 :(得分:1)
首先,在这种情况下,对malloc的调用是无用的,这是内存泄漏。
此代码段无效,因为您在前两个元素之间创建了一个无限循环
if (l != NULL)
{
if (l->prox == NULL)
{
aux = l;
}
else
{
while (l->prox != NULL)
{
aux = l->prox;
aux->prox = l;
l = l->prox;
}
aux->prox = l;
}
}
您可以这样更改
LInt new_head, aux;
new_head = NULL;
while (l != NULL)
{
aux = l->prox;
l->prox = new_head;
new_head = l;
l = aux;
}
return new_head;