为什么我得到链接列表的额外输出



问题是

有一个输入字符串的集合和一个查询字符串的集合。对于每个查询字符串,确定它在输入字符串列表中出现的次数。

字符串=[ab,ab,abc]查询=[ab,abc,bc]存在ab的实例2、"abc"的实例1和"bc"的实例0。对于每个查询,添加一个元素。

#include <iostream>
#include <cstdio>
#include <string>
using namespace std;
struct node {
int data;
node *next;
}*first=NULL,*last= new node;
void create(int count) {
node *temp;
temp = new node;
temp->data = count;
temp->next = NULL;
if(!first) first=last=temp;
else {
last->next = temp;
last = temp;
}
}
void display() {
node *temp = first;
while(temp) {
cout<<temp->data<<endl;
temp = temp->next;
}
}
void matchStrings(string s[],string q[],int s_count,int q_count){
int counter;
// res = new int[q_count];
for(int i=0;i<=q_count;i++){
counter = 0;
for(int j=0;j<s_count;j++){
if( q[i] == s[j] ) counter++;
}
if(counter != 0) create(counter);
else create(0);
}
// return res;
}
int main() {
int string_count,query_count,*res;
cin>>string_count;
string strings[string_count];
for(int i=0;i<string_count;i++) cin>>strings[i];
cin>>query_count;
string queries[query_count];
for(int i=0;i<query_count;i++) cin>>queries[i];
matchStrings(strings,queries,string_count,query_count);
// res = matchStrings(strings,queries,string_count,query_count);
matchStrings(strings,queries,string_count,query_count);

// for(int i=0;i<query_count;i++) cout<<res[i]<<endl;
display();

return 0;
}

现在我尝试使用链表来实现它,但没有得到2,1,0的输出。我得到的输出是2,1,0,2,2,1,0,2。我不知道LL是如何为3个以上的链接创建的。请帮忙。

在函数CCD_ 1中,你已经写了

for(int i=0;i<=q_count;i++){

相反,它应该是

for(int i=0;i<q_count;i++){

由于额外的迭代,随机生成的字符串将与strings[]集进行检查,结果它们不正确匹配。

因此,这导致create(0)的执行增加了一次,从而创建了一个额外的节点,该节点的数据为0,并被打印出来。

相关内容

  • 没有找到相关文章

最新更新