假设有一带头结点的循环双链表表示的线性表L=(a1,a2,…,an-1,an)。 设计在时间和空间上都尽可能高效的算法,将线性表L改造成L=(a1,a3,…,an,…,a4,a2)。要求: 根据基本设计思想,采用C或C++或Java语言描述算法,

admin2014-04-17  28

问题 假设有一带头结点的循环双链表表示的线性表L=(a1,a2,…,an-1,an)。
    设计在时间和空间上都尽可能高效的算法,将线性表L改造成L=(a1,a3,…,an,…,a4,a2)。要求:
根据基本设计思想,采用C或C++或Java语言描述算法,关键之处给出注释。

选项

答案算法实现如下: void modi fy(struct node *head) { struct node *s=NULL; struct node *L=head; struct node *p=L一>next,*p1; L一>next=L一>prev=NULL; for(;p !=L;p=p1) { if(p一>next !=L) { //删除偶数结点 p1=p一>next; p一>next=p1一>next; p1一>next一>preV=p; //把偶数结点捅入s if(s==NULL) { s=p1; p1一>next=p1一>prev=p1; } else { p1一>next=s; p1一>prev=s一>preV; s一>prev一>next=p1; S一>preV=p1; s=s一>preV; } } p1=p一>next; L一>preV一>next=p; p一>next=L; p一>prev=L一>prev; L一>prev=p; } //合并两个链表 if(s==NULL)return; p=s一>preV p一>next=L; L一>preV一>next=s; s一>prev=L一>preV; L一>prev=p; }

解析
转载请注明原文地址:https://jikaoti.com/ti/ipajFFFM
0

最新回复(0)