【发布时间】:2017-06-14 08:50:54
【问题描述】:
我正在尝试编写一个函数,该函数将用于以这种方式旋转链表:1 -> 2 -> 3 -> 4,如果用户选择要向前移动 3 个节点的第一个节点,它将转到是:2->3->1->4->END(在两个节点之间切换,直到它到达第三个节点,在我看来就像冒泡排序)。另一个例子:如果用户选择第二个节点作为第一个节点,它将看起来像这样:2->1->3->4->END。
【问题讨论】:
-
这不是排序,这只是简单的节点交换位置。您通常通过重新分配要移动的节点的指针来为列表执行此操作。
-
@Someprogrammerdude 支持您的评论,链表可以以这样一种方式实现,即它们的头部和尾部具有人工附加节点,以便在涉及节点之一的情况下消除交换中的边缘情况是在开头还是结尾。
-
我不认为它与任何排序算法有关。您认为应该为链接列表输出的内容:
3->1->7->10->5->12->8->END,如果我选择将元素7移动 2。 -
@Saga 不,我的意思是将第三个元素 (7) 移动 2 步。
-
@Saga 是的!因此,如果我们将第 3 个元素(7)移动 2 步,则列表将是
3->1->10->5->7->12->8->END。这是正常的换档。我的观点是:这与任何排序算法有关。因为如果我们在这个列表上执行任何sorting算法(例如bubble sort),那么输出将会不同(在这种情况下,第一次迭代后输出将是1->3->7->5->10->8->12->END)。
标签: c linked-list bubble-sort