简体   繁体   English

复制c中的链接列表

[英]Copy a linked list in c

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;
}

This function is supposed to copy a linked list, but this way, when I call the function to print it on screen, the list comes up reversed... Any help or tip? 这个函数应该复制一个链表,但这样,当我调用该函数在屏幕上打印它时,列表会反转...任何帮助或提示? Thank you in advance! 先感谢您!

you have nova->prox=aux2; 你有nova->prox=aux2; where aux2 is the previous node....thus, you are actually pointing backwards in the linked list. 其中aux2是前一个节点....因此,您实际上是在链接列表中向后指向。

Pls look at these links for correct logic: 请查看这些链接以获得正确的逻辑:

Coding a function to copy a linked-list in C++ 编写一个函数来复制C ++中的链表

Adapted @templatetypedef's answer from How do you copy a linked list into another list? 改编@ 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;
}
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;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM