[英]Allow duplicates in Merge sort on singly linked list C++
我现在对此感到非常恼火。 我正在为大学学习合并排序,并且正在经历我在网上找到的这种合并排序。 但是,我似乎没有得到重复,我想要重复。 它的这一点如下,但我已经评论了这一点和东西,它使排序无法正常工作。 有什么办法可以保留重复项吗? 如果您能保持答案简单,我将不胜感激。 谢谢
else
{
// Both are equal.
// Arbitraritly chose to add one of them and make
// sure you skip both!
if(c == NULL)
{
c = a;
}
else
{
c->next = a;
c = c->next;
}
a = a->next;
b = b->next;
}
我认为线索在代码中的注释中:“确保你跳过两者”。 通过递增两个列表指针,您将向 output 添加一个元素,但会跳过两个输入元素。 所以只增加一个指针。 然后,另一个元素将在下一次迭代中移动到 output 列表中。
如果要保留重复项,请将两者都添加到链表c
中。 现在,您只需将一个(即a
或b
)附加到链接列表中。
因此,将您的代码更改为如下所示:
temp_a_next = a->next;
temp_b_next = b->next;
if(c == NULL)
{
c = a;
c->next = b;
c = b;
}
else
{
c->next = a;
c = a;
c->next = b;
c = b;
}
a = temp_a_next;
b = temp_b_next;
还要注意:带有重复项的排序列表的最终头部将在a
中开始,因为在该算法结束时c
将指向列表的末尾,并且该算法实际上是在修改a
的指针和b
节点(即c
不是带有新节点的新链表)。
您可以消除第三种情况(代码中列出的当前 else 块),并将第二种情况从a > b
更改为else
- 现在它将处理a >= b
任何情况,并且总是将第a
放在排序列表。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.