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

admin2017-04-28  42

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

选项

答案算法实现如下: void modify(struct node *head) { struct node *s=NULL; struct notie *L=head; struct : nocie *p=L—>next,*pl; L—>next=L—>prev NULL; for(;p !=L;p=pl) { if (p—>next ! =L) { pl=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=pl; s —>prev=pl; s=s—>prevr pl=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://kaotiyun.com/show/uHRi777K
0

最新回复(0)