问答题 编写一个函数,将一个头结点指针为a的单链表A分解成两个单链表A和B,其头结点指针分别为a和b,使得A链表中含有原链表A中序号为奇数(1,3,…)的元素(头结点紧接的下一个元素为第1个元素),而B链表中含有原链表A中序号为偶数(2,4,…)的元素,且保持原来的相对顺序。
【正确答案】(1)数据结构
   采用单链表的定义。
   (2)思路
   用一个while循环来处理,一次循环处理两个节点:将前一个仍留在A,后一个从A中删除,插入B中,直到整个链处理完毕。
   (3)算法
   int split(PNode*addr_a,PNode*addr_b){
   /*若成功分解,返回1;否则,返回0。PNode*addr_a和PNode*addr_b分别为指向单链表A和B的指针的地址*/
   PNode cur_a,cur_b,temp;
   cur_a=(*addr_a)->link;
   cur_b=createNullList();
   if(cur_b==NULL)return0;
   *addr_b=cur_b;
   while(cur_a!=NULL&&(temp=cur_a->link)!=NULL){
       cur_a->link=temp->link;
       cur_a=cur_a->link;
       cur_b->link=temp;
       cur_b=Cur_b->link;
   }
   cur_b->link=NULL;
   return 1;
   }
   (4)代价分析
   最坏时间代价O(n)。
【答案解析】