我想为两个链接列表的联盟开发一个朋友函数。编译器不断给我一个错误,说Node没有在这个范围内声明,以及p,q没有在这个范围内声明。所以我添加列表::节点,但不执行工会仍然两个链接列表的联盟
注意我插入功能添加节点按升序排列,我已经尝试过了,它确实测试用例的工作,这是当我实现东西误入歧途的联合功能...
我想为两个链接列表的联盟开发一个朋友函数。编译器不断给我一个错误,说Node没有在这个范围内声明,以及p,q没有在这个范围内声明。所以我添加列表::节点,但不执行工会仍然两个链接列表的联盟
注意我插入功能添加节点按升序排列,我已经尝试过了,它确实测试用例的工作,这是当我实现东西误入歧途的联合功能...
我认为你修正了编译错误,现在你想知道为什么它不起作用。
您没有正确合并这两个列表。这些问题是:
,如果它在这两个列表中你只插入一个项目 - 这是路口,不工会。
您正在同时推进两个指针。
您需要合并一种或另一种:
while (q && p) {
if(q->value < p->value) {
result.insert(q->value);
q = q->next;
} else if(q->value > p->value) {
result.insert(p->value);
p = p->next;
} else {
result.insert(q->value);
q = q->next;
p = p->next;
}
}
现在,一旦这些表指针或者到达终点,你还需要添加来自其他剩余的元素。这将这样的伎俩:
for(; q; q = q->next) result.insert(q->value);
for(; p; p = p->next) result.insert(p->value);
确保,此外,您已经定义一个拷贝构造函数的List
。看起来你在那里做你自己的内存分配,所以你必须遵循三项规则。
是的,我让他们困惑..谢谢你 – user2809437
首先,我不确定你的代码打算做什么。 看来你期望的输入是2列表,你并行步骤,如果相应的值匹配构造第三个列表。 这更像是一个交叉点,而不是工会,因为它关心的是位置。
该插入似乎是一个排序插入。
无论如何,这部分肯定是错误的:
如果(Q->值==对 - >值){ result.insert(Q->值); q = q-> next; p = p-> next; }
删除这些q = q-> next和p = p-> next。 由于它是在if语句内部和外部完成的,因此这些步骤引起了两步。
双步执行不好,因为它可能会带您过去列表的末尾,导致崩溃。
'union'是C++中的保留字 – paddy
oops它实际上是getunion – user2809437
Node是如何声明的? –