2013-11-22 92 views
-1

我想为两个链接列表的联盟开发一个朋友函数。编译器不断给我一个错误,说Node没有在这个范围内声明,以及p,q没有在这个范围内声明。所以我添加列表::节点,但不执行工会仍然两个链接列表的联盟

​​

注意我插入功能添加节点按升序排列,我已经尝试过了,它确实测试用例的工作,这是当我实现东西误入歧途的联合功能...

+1

'union'是C++中的保留字 – paddy

+0

oops它实际上是getunion – user2809437

+1

Node是如何声明的? –

回答

1

我认为你修正了编译错误,现在你想知道为什么它不起作用。

您没有正确合并这两个列表。这些问题是:

  1. ,如果它在这两个列表中你只插入一个项目 - 这是路口,不工会

  2. 您正在同时推进两个指针。

您需要合并一种或另一种:

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。看起来你在那里做你自己的内存分配,所以你必须遵循三项规则。

+0

是的,我让他们困惑..谢谢你 – user2809437

0

首先,我不确定你的代码打算做什么。 看来你期望的输入是2列表,你并行步骤,如果相应的值匹配构造第三个列表。 这更像是一个交叉点,而不是工会,因为它关心的是位置。

该插入似乎是一个排序插入。

无论如何,这部分肯定是错误的:

如果(Q->值==对 - >值){ result.insert(Q->值); q = q-> next; p = p-> next; }

删除这些q = q-> next和p = p-> next。 由于它是在if语句内部和外部完成的,因此这些步骤引起了两步。

双步执行不好,因为它可能会带您过去列表的末尾,导致崩溃。