gpt4 book ai didi

c - 使用存储链表每个节点地址的数组查找两个 singleLinkedlist 的合并点

转载 作者:行者123 更新时间:2023-11-30 14:36:58 25 4
gpt4 key购买 nike

问题是使用一个存储链表每个节点地址值的数组来找到两个链表的合并点。

我尝试增加更改头指针的地址大小,但似乎对长链表没有帮助。

int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2) {
SinglyLinkedListNode **a;
a=(SinglyLinkedListNode**)malloc(200*sizeof(SinglyLinkedListNode));
int i=0;
while(head1){
a[i]=head1;
head1=head1->next;
i++;
}
while(head2){
SinglyLinkedListNode *p=head2;
for(int j=0;j<i;j++){
if(a[j]==p){
return p->data;
}
}
head2=head2->next;
}
return -1;
}

最佳答案

此处仅讨论您帖子的一部分:

声明

a=(SinglyLinkedListNode**)malloc(200*sizeof(SinglyLinkedListNode));

有一些潜在的问题。
1)如果您期望这为可寻址数组数组创建内存,那么它并没有按照您期望的方式执行操作。
2) 在 C 中强制转换 calloc 的返回值是不必要的(或推荐的)。(在 C++ 中是这样)

可以通过多种方式创建任何类型变量的可寻址数组,以下是一个示例:

TYPE ** Create2D(ssize_t numArrays, ssize_t maxArrayLen)
{
int i;
TYPE **a = {0};
a = calloc(numArrays, sizeof(TYPE *));
for(i=0;i<numArrays; i++)
{
a[i] = calloc(maxArrayLen + 1, 1);
}
return a;
}

其中 TYPE 是任何 C 类型,例如 charintfloat,或本例中的 SinglyLinkedListNode。只需将 TYPE 替换为任何实际类型,该函数就会创建一个数组的数组,例如:

SinglyLinkedListNode **a;
a = Create2D(20, 200);//create 20 arrays, each with 200 elements

通过数组表示法访问每个元素:a[i][j]

完成后不要忘记释放。

关于c - 使用存储链表每个节点地址的数组查找两个 singleLinkedlist 的合并点,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57692679/

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