【正确答案】(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)。
【答案解析】