1
typedef struct slist *LInt;

typedef struct slist{

int value;
LInt prox;
}Node;

LInt clone2(LInt l){

LInt nova=NULL,aux2=NULL;
while(l){
    aux2=nova;
    nova=(LInt)malloc(sizeof(Node));
    nova->value=l->value;
    nova->prox=aux2;
    l=l->prox;
    }
return nova;
}

这个函数应该复制一个链表,但是这样,当我调用该函数在屏幕上打印它时,列表会颠倒过来......有什么帮助或提示吗?先感谢您!

4

2 回答 2

3

你有前一个节点nova->prox=aux2;在哪里aux2......因此,你实际上是在链接列表中向后指向。

请查看这些链接以获得正确的逻辑:

编写函数以在 C++ 中复制链表

改编自如何将链接列表复制到另一个列表中的@templatetypedef 的答案?

LInt Clone(LInt l) {
if (l == NULL) return NULL;

LInt result = (LInt)malloc(sizeof(Node));
result->value = l->value;
result->prox = Clone(l->next);
return result;
}
于 2013-05-24T00:18:57.973 回答
0
LInt clone2(LInt l){
    LInt ret=NULL;
    LInt nova, aux2 = NULL;
    while(l){
        nova=(LInt)malloc(sizeof(Node));
        if(!ret) ret = nova;
        if(aux2) aux2->prox = nova;
        nova->value=l->value;
        nova->prox = NULL;
        aux2 = nova;
        l=l->prox;
    }
    return ret;
}
于 2013-05-24T00:46:19.490 回答