如题
题目:
我的想法是创建一个长度为20的指针数组,初始化为NULL,用两个for循环把前两个数组的值相加后映射再插入链表,然后再用两个for循环将后两个数组的值求和取负后映射着寻找是否有相同的值,有的话说明四个数相加为0,于是记录数量。
代码:
#define MaxPointLength 20//指针数组长度
struct HashNode{
int val;
int length;
struct HashNode *next;
};
int HashMap(int data){
int Table_Index=data%MaxPointLength;
return Table_Index;
}//返回数据映射到的下标
void HashInsert(struct HashNode **A,int data){
struct HashNode *newNode=malloc(sizeof(struct HashNode));
newNode->val=data;
newNode->next=NULL;
int index=HashMap(data);
struct HashNode *L=A[index];
if(A[index]==NULL){//如果指针数组对应的指针为空,则指向新创建的结点
A[index]=newNode;
}
else{
while(L->next!=NULL){
if(L->val==data){//对应的指针如果不为空,则遍历到链表相同值的结点或最后一个结点,插在后面
newNode->next=L->next;
L->next=newNode;
return;
}
L=L->next;
}
L->next=newNode;
}
}//插入数据
int Find_Node(struct HashNode **A,int data){
struct HashNode *L;
int count=0;
int index=HashMap(data);
L=A[index];
while(L->next!=NULL){
if(L->val==data)//如果有跟data相同的结点,就统计数量
count++;
}
return count;//返回 值为data的结点 在链表中出现的数量
}
int fourSumCount(int* nums1, int nums1Size, int* nums2, int nums2Size, int* nums3, int nums3Size, int* nums4, int nums4Size){
struct HashNode **A=malloc(MaxPointLength*sizeof(struct HashNode*));
int count=0;
for(int i=0;i<MaxPointLength;i++)
A[i]=NULL;
for(int i=0;i<nums1Size;i++){
for(int j=0;j<nums2Size;j++){
HashInsert(&&A,nums1[i]+nums2[j]);
}
}
for(int k=0;k<nums3Size;k++){
for(int l=0;l<nums4Size;l++){
count+=Find_Node(&&A,-(nums3[k]+nums4[l]));//报错位置
}
}
return count;
}
报错:
麻烦大lao们帮我看看我错在哪里了,非常感谢!!