由于学校进度太慢(C都没教完),所以我开始自学,以下是我写的数据结构算法,希望有高手能帮我看下正确与否或有可以优化的地方,谢谢。


2.9设ha和hb分别是两个带头结点的非递减有序单链表的头指针,试设计算法,将这两个有序链表合并成一个非递减有序的单链表。要求使用原链表空间,表中无重复数据。

LinkedList TwotoOne (LinkedList ha,LinkedList hb)
{
LNode *a,*b,*temp;
for(a=ha,b=hb;a->next->next&&b->next;a=a->next)
{
if(a->next->data<b->next->data)//把b数据大于a的插入a表中
{
temp=b->next;
b->next=b->next->next;
temp->next=a->next->next;
a->next=temp;
}
else
if(a->next->data==b->next->data)//删除数据相等结点
{
temp=b->next;
b->next=b->next->next;
free(temp);
}
}
if(b->next)//把B余下结点接到a表尾
{
a->next->next=b->next;
free(b);//释放b头结点
}
return ha;
}//end



2.10设la是一个双循环链表,其表中元素递增有序。试写一算法插入元素x,使表中元素依然递增有序。


DLinkedList ListInsert(DLinkedList la,ElemType x)
{
DLNode *p,*l;
p=(DLNode*)malloc(sizeof(DLNode));
p->data=x;
for(l=la;l!=la;l=l->next)
{
if(l->next->data<=p->data)
{
p->next=l->next;
p->prior=l;
l->next->prior=p;
l->next=p;
p=null;
break;
}
}
if(p!=null)
{
la->prior->next=p;
p->next=la;
p->prior=la->prior;
la->prior=pl
}
return la;
}//end