>问题是使用存储链表每个节点的地址值的数组来查找两个链表的合并点。
我尝试增加更改头部指针的地址大小,但似乎对长链表没有帮助。
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 类型,例如char
、int
、float
,或者在本例中为SinglyLinkedListNode
。 只需将TYPE替换为任何实际类型,该函数将创建一个数组数组,例如:
SinglyLinkedListNode **a;
a = Create2D(20, 200);//create 20 arrays, each with 200 elements
每个元素可通过数组表示法访问:a[i][j]
完成后不要忘记免费。
int findMergeNode(SinglyLinkedListNode* head1, SinglyLinkedListNode* head2)
{
SinglyLinkedListNode *temp = head2;
while(head1) {
head2 = temp;
while(head2) {
if(head1 == head2) {
return head2->data;
}
head2 = head2->next;
}
head1 = head1->next;
}
return -1;
}