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

admin2017-11-20  39

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

选项

答案算法实现如下: void modify(struct node*head) { s.truct node *s=NULL; struct node *L=head; st ruct 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->prey; } } p1=p->next; L->prey->next=p; p->next=L; p->prev=L->prey; 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://kaotiyun.com/show/8VRi777K
0

最新回复(0)