Algorithm 使用已排序和反向排序的替换元素对链接列表进行排序
我在一次采访中被问到这个问题 列表如下所示 a1->bn->a2->bn-1…->an->b1->NULL 这样,, a1Algorithm 使用已排序和反向排序的替换元素对链接列表进行排序,algorithm,sorting,data-structures,linked-list,Algorithm,Sorting,Data Structures,Linked List,我在一次采访中被问到这个问题 列表如下所示 a1->bn->a2->bn-1…->an->b1->NULL 这样,, a1
- 通过抖动列表中的“下一个”指针,创建两个列表。一个包含a,另一个包含b,相反
- 对这两个列表进行合并
然而,我同意这个问题是相当人为的。那么,期望的结果是什么?将列表作为一个整体进行排序,而不区分
a
和b
元素?编辑该问题以解决以下问题:comments@Saurabh你还没有回答我的问题。期望的输出是什么?我有。这个问题已经得到了回答:你必须对列表进行排序,@Saurabh实际上,没有。你所说的只是列表应该“排序”。您还没有指定这是否意味着a
和b
节点之间不应有区别。史蒂夫,这也是我对这个问题的第一反应,但根据采访者的说法,这是一项要求。@Saurabh:嗯,如果不允许重新链接节点,则链表就像没有随机访问的数组。因此,解决方案将与数组相同,但速度可能较慢。我认为这就是他的意思。我会接受你的回答。天哪,我现在很尴尬:我认为进一步的改进是首先对反向排序的替换元素进行排序。然后合并两个已排序的列表。@Saurabh:提到冒泡排序提醒我,冒泡排序是一种访问模式的最佳排序,在这种模式中,您可以通过一个小窗口查看内存,该窗口向前跟踪,但不向后跟踪,然后在开始时再次开始(旋转鼓存储)。单链表就是这样,向前移动很便宜,但向后移动必须从头开始。我还没有想到一种方法来优化这种输入数据思想的冒泡排序。