C程序制作链表的第二个副本

use*_*ser 5 c algorithm linked-list

我正在编写一个C代码,将链接列表的内容复制到另一个列表中.我想知道是否有更有效的方法来做到这一点.

哪个更好?

struct node *copy(struct node *start1)
{
struct node *start2=NULL,*previous=NULL;

while(start1!=NULL)
{
    struct node * temp = (struct node *) malloc (sizeof(struct node));
    temp->info=start1->info;
    temp->link=NULL;

    if(start2==NULL)
    {
        start2=temp;
        previous=temp;
    }
    else
    {
        previous->link=temp;
        previous=temp;          
    }
    start1=start1->link;
}
return start2;
}
Run Code Online (Sandbox Code Playgroud)

要么

struct node *copy(struct node *start1)
{
    if(start1==NULL) return;
    struct node *temp=(struct node *) malloc(sizeof(struct node));
    temp->info=start1->info;
    temp->link=copy(start1->link);
    return temp;
}
Run Code Online (Sandbox Code Playgroud)

axi*_*iom 6

要将一个链接列表复制到另一个链接列表,您没有其他选择,只能迭代一个链接列表,并在整个O(n)时间内将值复制到第二个链接列表.你已经在做了.有没有办法做的更好,除非有被存储的元素之间有一定的关系.

递归解决方案可能更好看,但实际上效率降低.

编辑:对于更改的问题

迭代版本更好.

注意:LOC与效率没有直接关系.