2.题目描述
设计一个算法将带头结点的单链表La分解为两个具有相同结构的链表Lb,Lc,其中Lb表中的结点为La中值小于零的结点,Lc为La中值大于零的结点(La中的元素为非零整数)
算法思想
Lb可以直接用La的存储空间,但需为Lc申请新的结点空间,并将两表初始化,插入时如果用尾插法需用到多个指针,而头插法只需用一个,所以头插法比较简单,代码用的时头插法
代码演示
void Decompose(LinkList &La,LinkList &Lb,LinkList &Lc){
Lb=La; //Lb不用申请,直接用La的存储空间
pa=La->next; //pa为工作指针
Lb->next=NULL; //Lb初始化为空表
Lc=new LNode; //为Lc申请结点空间
Lc->next=NULL; //Lc初始化为空表
while(pa){ //La未到达尾结点
if(p->date>0){ //头插法
q=pa->next; //防止找不到pa->next
pa->next=Lc->next;
Lc->next=pa;
pa=q;
}
else{
q=pa->next;
pa->next=Lb->next;
Lb->next=pa;
pb=q;
}
}
}
附:如有错误,欢迎指正。