问答题
设用带头结点的双向循环链表表示的线性表为L=(a
1
,a
2
,…,a
n
)。写出算法将L改造成:L=(a
1
,a
3
,…,a
n
,…,a
4
,a
2
)。【华中科技大学2007年】结点和结点指针类型定义如下:typedefstrUCtnode{ElemTypedata;strLICtnode*prior,next;}*DLinkList;
【正确答案】正确答案:算法的基本设计思想:依次访问数据元素a
1
,a
2
,…,a
n-1
将其序号为偶数的结点先删除,再插入到a。的后面。算法的代码: void Adj uSt(DLinkLiSt L){ DLinkList tail=L一>priOr,p=L一>next; int i=0; while(P!=tail) { i++; q=p一>next ; if(i%2==0) { P一>prior一>next=q; q一>prior=P一>prior ; tail一>next一>prior=p; P一>next=tail一>next ; P一>prior=tail; tail一>next=P; } p=q; } }//AdjUSt
【答案解析】