C++ 允许对单链表C+;进行合并排序+;

C++ 允许对单链表C+;进行合并排序+;,c++,duplicates,mergesort,singly-linked-list,C++,Duplicates,Mergesort,Singly Linked List,我现在真的很生气。我正在为大学学习合并排序,正在经历我在网上找到的这个过程。然而,我似乎没有得到副本,我想要副本。这一点如下,但我已经评论了这一点和东西,它使排序不能正常工作。我有没有办法保留这些复制品?如果你能保持答案简单,我将不胜感激。多谢各位 else { // Both are equal. // Arbitraritly chose to add one of them and make // sure you skip both! if(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;
}

我想线索就在代码中的注释中:“确保两个都跳过”。通过增加两个列表指针,可以向输出中添加一个元素,但跳过两个输入元素。所以只增加一个指针。然后,在下一次迭代中,另一个元素将被移动到输出列表中。

我认为提示在代码中的注释中:“确保两个都跳过”。通过增加两个列表指针,可以向输出中添加一个元素,但跳过两个输入元素。所以只增加一个指针。然后,在下一次迭代中,另一个元素将被移动到输出列表中。

如果要保留重复项,则将这两个元素都添加到链表
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
不是带有新节点的新链表)。

如果要保留重复项,请将这两个项都添加到链表
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
放在排序列表的第一位。

您可以消除第三种情况(代码中列出的当前else块),并将第二个大小写从
a>b
更改为
else
——它现在将处理
a>=b
的任何情况,并将始终将
a
放在排序列表的第一位。

我不想要重复的内容。

有没有办法保留重复的内容是哪一个?天啊哈哈哈我太累了对不起,我想保留副本lol@Tazzy:好的。那你能把你的问题修改一下吗?我很抱歉忘了tag@Oli我把“不要”这个词拿出来,希望现在更清楚,我会尽量说清楚“我不想要复制品”。“我有办法保留复制品吗?”是哪一个?天啊哈哈哈我太累了对不起,我想保留副本lol@Tazzy:好的。那你能把你的问题修改一下吗?我很抱歉忘了tag@Oli我去掉了“不”这个词,希望现在能更清楚,我会尽量让它更清楚