所以我有一个单独的链表。新项目被添加到链的前面,所以如果你添加了8,4,10,那么列表将是10,4,8。无论如何,现在我试图在插入完成后对列表进行排序,除了我无法弄清楚如何循环这些数字并按升序重新排列它们。我可能会在这里稍稍休息一下,希望能帮助我解决这个问题。
*这是一个学校的项目,所以建议我使用其他容器对我的情况没有帮助,除了提供信息,因为我不能改变我正在使用的东西。
列表布局
struct Node
{
int Item; // User data item
Node * Succ; // Link to the node's successor
};
unsigned Num //number of items in the list
Node * Head //pointer to the first node
我的插入功能如下所示
Node * newOne;
newOne = new (nothrow) Node;
newOne->Item = X;
newOne->Succ = NULL;
if(Head == NULL)
{
Head = newOne;
}
else
{
newOne->Succ = Head;
Head = newOne;
}
Num++;
答案 0 :(得分:4)
这可以通过两种方式完成,我不打算发布代码,但希望这会对你有帮助。
<强> 1。在插入期间按升序排列
这涉及始终按升序添加元素。例如,如果链接列表是
| 1 |
并添加5个新链接列表
|1|--->|5|
如果你接下来添加3,它应该是
|1| ---> |3| ----> |5|
这包括比较新元素,直到找到正确的位置。
<强> 2。等到所有元素都插入后,按升序排列。
这将涉及在链表的元素上使用排序算法,如合并排序,插入排序,冒泡排序等。
完成数字排序后,按正确的顺序重写链接列表。
示例:
如果链接列表包含
3 2 5 1 6
排序算法后
1 2 3 5 6 (stored in an array)
现在遍历链接列表并按正确的顺序替换元素。
如果节点包含其他元素,请注意,其他元素也需要替换。
注意:这需要额外的内存,另一种方法是交换节点,这需要更长的时间。除非链接列表包含大量节点(因此使内存重要)或具有其他元素,否则使用数组会更简单。
答案 1 :(得分:1)
对单个链表进行排序对代码来说很难(除非你喜欢线性排序,如冒泡排序或插入排序)。将内容复制到矢量,对矢量进行排序,然后重建列表要简单得多。