允许在单链接列表C ++上以Merge排序重复

|| 我现在对此感到非常恼火。我正在为大学学习合并排序,并正在通过网上发现的这种合并排序进行学习。但是,我似乎没有得到重复,我想要重复。它的用法如下,但我已对此进行了评论,它使排序无法正常工作。有什么办法可以保留副本吗?如果您能保持简单的回答,我将不胜感激。谢谢
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;
}
    
已邀请:
我认为线索在于代码的注释中:“确保同时跳过两者”。通过增加两个列表指针,您将向输出添加一个元素,但是跳过了两个输入元素。因此,仅增加一个指针。然后,另一个元素将在下一次迭代时移入输出列表。     
如果要保留重复项,则将两者都添加到链接列表“ 1”中。现在,您只需将一个(即append2ѭ或
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
的指针和3个节点(即1个不是具有新节点的新链表)。     
您可以消除第三种情况(代码中列出的当前else块),并将第二种情况从
a > b
更改为
else
-现在它将处理
a >= b
的任何情况,并且始终将
a
放在排序列表的第一位。     

要回复问题请先登录注册