C 如何将2个linkedlist中的元素复制到新的linkedlist中

C 如何将2个linkedlist中的元素复制到新的linkedlist中,c,C,我有2个linkedlist,我想将这两个集合中的元素复制到newSet中,这样我就可以删除newSet中的deplicate值并显示它。到目前为止,一切似乎都出了问题,它没有复制设置 struct Node *Union(struct Node *Link1, struct Node *Link2) { struct Node * set1 = Link1; struct Node * set2 = Link2; //Creat a new set str

我有2个linkedlist,我想将这两个集合中的元素复制到newSet中,这样我就可以删除newSet中的deplicate值并显示它。到目前为止,一切似乎都出了问题,它没有复制设置

struct Node *Union(struct Node *Link1, struct Node *Link2)
{

    struct Node * set1 = Link1;

    struct Node * set2 = Link2;

    //Creat a new set
    struct Node * newSet = (struct Node *) malloc(sizeof(struct Node));

    while(set1 != NULL && set2 != NULL)
    {

        //copy sets to newSet
        newSet->data = set1->data;
        newSet->data = set2->data;
        newSet->next = Union(set1->next, set2->next);
    }

    return (newSet);

}

您的主要问题是为新值分配一个节点,然后用两个列表的标题覆盖它,并前进两个指针。这意味着您每秒钟都会丢失一个节点

此外,连接两个列表并不适合递归,因为搜索空间不会减少那么快(递归的理想候选者,如二进制切分或多路树遍历,在每次递归调用时都会丢弃大量的搜索空间)。您可以通过以下方式进行迭代(假设按升序排序,并使用伪代码,因为这是家庭作业):

它的基本工作原理是对添加到目标列表中的每个节点进行一次迭代,直到两个源列表都为空。如果其中一个源列表为空,它将从另一个列表中选择下一个节点

否则,它将从列表中选择当前指针值最低的下一个节点

def union (link1, link2):
    set1 = link1, set2 = link2
    headnode = NULL, tailnode = NULL

    # Continue until both lists empty.

    while set1 is not NULL and set2 is not NULL:
        # Create new node and set next pointer to NULL.

        newnode = alloc_node()
        newnode->next = NULL

        # Select which set will provide the next node.

        if set1 is NULL:
            newnode->data = set2->data, set2 = set2->next
        else if set2 is NULL:
            newnode->data = set1->data, set1 = set1->next
        else if set2->data is less than set1->data:
            newnode->data = set2->data, set2 = set2->next
        else:
            newnode->data = set1->data, set1 = set1->next

        # Add to end of (possibly empty) list.

        if headnode is NULL:
            headnode = newnode, tailnode = newnode
        else:
            tailnode->next = newnode, tailnode = newnode

    return headnode