问答题
将一个带头结点的单链表A分解为两个带头结点的单链表A和B,使得A表中含有原表中序号为奇数的元素,而B表中含有原表中序号为偶数的元素,且保持其相对顺序不变。1)写出其类型定义。2)写出算法。【山东工业大学2000年】
【正确答案】正确答案:算法的基本设计思想:基本思想与上题一样,使用一指向表尾的指针,采用在链表尾插入,可使分解后两表中元素结点的相对顺序不变。算法的代码: LinkLiSt DiSCreat(LinkList A){ //A是带头结点的单链表,本算法将其分解成两个带头结点的单链表,A表中含 //原表中序号为奇数的结点,B表中含原表中序号为偶数的结点。相对顺序不变 i:0; //i记链表中结点的序号 B=(LinkList)malloc(sizeof(LNode));//创建B表表头 B->next=NULL; //B表的初始化 LinkList ra,rb; //re和rb将分别指向将创建的A表和B表的尾结点 ra=A; rb=B; p=A一>next; //p为链表工作指针,指向待分解的结点 A一>next=NULL; //置空新的A表 while(P!=NULL) { r=p一>next; //暂存P的后继 i++; if(i%2=0) //处理原序号为偶数的链表结点 { P一>next=NULL; //在B表尾插入新结点 rb一>next=p ; rb=p; //rb指向新的尾结点 } else //处理原序号为奇数的结点 { P一>next=NULL; ra一>next=P; ra=p, } p=r; //将P恢复为指向新的待处理结点 } return B; }//DiSCreat
【答案解析】