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