中易网

请教一道数据结构的算法题算法具体描述如下: 设以带头结点的双向循环链表L=(a1,a2,....,an).试写一个时

答案:2  悬赏:30  
解决时间 2021-02-26 17:48
设以带头结点的双向循环链表L=(a1,a2,....,an).试写一个时间复杂度为O(n)的算法,将L改造成L=(a1,a3,...an,...,a4,a2)。要求写出你的算法思想。要求用C语言写程序
最佳答案
有两种思想供参考:(1)整体思想 (2)化整为零
先来说说整体思想,我们可以发现序号为奇数的元素的前后相对位置未变,只是偶数位置有变化。这样的话,我们可以将偶数按序号逆序(由大到小)插入到链表尾部。考虑到时间复杂度问题,在搜索偶数的过程中,可以先找到最大的偶数序号+1的位置(是个奇数,奇数相对位置不动),记下它的位置为L,L向前指的那个位置是偶数位置。这样再找下一个时,直接用L-2,直至k-2等于3为止即可找到所有序号为偶数的位置。

怎么化整为零呢?先来看看下面这个过程:
null
1 2 (1是从head的后面插入链表,2是从tail的前面插入链表)
1 3 2 (3是从1的后面插入链表)
1 3 4 2(4是从2的前面插入链表)
1 3 5 4 2(5是从3的后面插入链表)
......
1 3 5 ... n ... 6 4 2
由此,我们可以设置2个指针p,q,分别指向刚刚序号为奇数的元素插入的位置和刚刚序号为奇数的元素插入的位置,下一个序号为奇数的元素插入到p后,为偶数的插入到q前,并随着插入的过程实时变化p,q,最后再将q和q指向的元素之间的2个指针接上就OK了。

程序交给你来写吧,应该不太难。
全部回答
你好! 很简单 设置一个等长的双向链表 然后给一个头指针,一个尾指针 遍历L,将L中2N+1位置的数从新链表的头指针向后插 将L中2N位置的的数中新链表的尾指针向前插 时间复杂度为O(n) 实现太容易了,就不详细说了 如有疑问,请追问。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
商品上的二维码。手机所能扫描出来的商品都是
弥陀居地址有知道的么?有点事想过去
初三物理同步答案
怎样用两个8位ad实现16位ad转换 第2页
我通过中介买了套二手房,房款80万,79个平方
常州市尚德物流有限公司在哪里啊,我有事要去
当前题目:从南昌到北京提示:打一字
离职之后公司不给发工资怎么解决
正确交友,文明交往演讲稿
我上手游热血传奇,tt没几分钟就掉了,手机问
阿尔海勒斯在哪里啊,我有事要去这个地方
我昨晚作了个梦,我梦见男朋友的前任女友到我
村子划社区农村户口会不会受影响
腾讯公司的员工上班穿职业装吗?
有机化合物 对称面,对称中心,对称轴与手性分
推荐资讯
“枇杷”有何寓意?
南方大厦地址在什么地方,想过去办事
中国演员中谁能代替金钟国
我从中山客运站要去达阜港工业区埠怎么去?
a的9次方与—a的6次方的公因式
华方电脑公司我想知道这个在什么地方
云南茶业在哪里啊,我有事要去这个地方
威海港城实业总公司在哪里啊,我有事要去这个
买的有个人意外险,年龄60十多了开摩托三轮发
螺纹钢做冷弯检验时的弯心直径是多少?
登机票上的日期19MAY是什么意思
地下城与勇士安装包里面有个MUSIC文件夹,里
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?