gpt4 book ai didi

c - 链表的并集

转载 作者:行者123 更新时间:2023-11-30 15:17:41 25 4
gpt4 key购买 nike

我创建了一个程序来查找 2 个链表的并集。我的逻辑是首先获取一个新列表,将 list1 内容插入到该列表中,并仅插入 list2 中不在结果列表中的值。我的代码是:

#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>

/* Linked list node */
struct node
{
int data;
struct node* next;
};
struct node* result;

struct node *newNode(int data)
{
struct node *new_node = (struct node *) malloc(sizeof(struct node));
new_node->data = data;
new_node->next = NULL;
return new_node;
}

/* Function to insert a node at the beginning of the Doubly Linked List */
void push(struct node** head_ref, int new_data)
{
/* allocate node */
struct node* new_node = newNode(new_data);

new_node->next=*head_ref;
*head_ref=new_node;
}

struct node *union3(struct node *first, struct node *second, struct node *result)
{
int flag = 0;
struct node *temp = NULL;
temp = first;
struct node *temp2 = NULL;
temp2 = second;
int value;
while (temp != NULL)
{
push(&result, temp->data); // pushing first list values in result
temp = temp->next;
}
while (second)
{
present(second->data, result); // comparing second list each member with result
second = second->next;
}
return result;
}

void present(int data, struct node *result1)
{
printf("The value in the beginning of present function is:");

int flag = 0;
while (result1)
{
if (result1->data == data)
{
flag++;
}
result1 = result1->next;
}
if (flag > 0)
{
printf("");
}
else
{
push(&result, data);
}
}

void printList(struct node *node)
{
while(node != NULL)
{
printf("%d ", node->data);
node = node->next;
}
printf("\n");
}

/* Drier program to test above function */
int main(void)
{
struct node* first = NULL;
struct node* second=NULL;
// struct node* result=NULL;
struct node* union2=NULL;
// create first list 7->5->9->4->6
push(&first, 6);
push(&first, 4);
push(&first, 9);
push(&first, 5);
push(&first, 7);
printf("First list is:");
printList(first);
push(&second,6);
push(&second,4);
push(&second,9);
push(&second,11);
push(&second,12);
printf("second list is");
printList(second);
printf("their union is:");
union2=union3(first,second,result);
printf("Union of 2 lists is:");
printList(union2);
return 0;
}

基本上我的逻辑是正确的,但结果变量出现了问题。即使我已将 result 设置为全局变量,但当它进入 present() 函数时,插入其中的 list1 值就会丢失。谁能告诉我为什么输出只显示 list1 内容:

output:6 4 9 5 7

最佳答案

使用您的算法,如果 list1 有重复项,它们将显示在最终结果中,但如果 list2 有重复项,它们将不会显示在最终结果中,这可能是您不想要的。

另外,我认为您打算使用 temp2 而不是第二个:

while(second)
{
present(second->data,result); //comparing second list each member with result
second=second->next;
}

最后,这花了我一些时间,但我发现了你的错误:

push(&result,data); 

应该是结果1

希望这有帮助!

关于c - 链表的并集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32147825/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com