设线性表L = (a1 ,a2,a3,.…,an-1,an)采用带头结点的单链表保存,请设计一个空间复杂度为 0(1)且时间上尽可能高效的算法,重新排列 L 中的各结点,得到线性表S= (a1,an,a2,an-1,.…)。 【输入形式】:多组数据,每组第一行为n,表示链表的长度。接下来为链表中的元素。不超过5组数据。 【输出形式】:每组数据,输出重新排列后的序列。
时间: 2023-05-29 10:02:19 浏览: 201
设双链表表示的线性表L=(a1,a2,……,an),试写一时间复杂度为O(n)的算法,将L改造为L=(a1,a3,……,an,……,a4,a2)。
分析:重新排列后的序列可以看作是由原序列的第一个元素和最后一个元素开始依次交替出现的序列。因此可以采用以下方法重新排列:先找到链表的中间节点,将链表分成两部分,将后半部分的链表结点翻转,然后将前半部分和翻转后的后半部分依次交替连接起来即可。时间复杂度为O(n),空间复杂度为O(1)。
代码如下:
阅读全文