最近在写单链表合并 实现从新链表也是有序排列 的时候,感觉跟我学的(我看的B站王卓的 视频课 )跟我自己写的不太一样。这里做一下笔记!方便自己记录阅读!
首先是自己的思路——既然是两个链表(La Lb)包装的稀疏多项式的合并,那我就可以重新再建立一个新的链表(Lc)然后在两个链表的中按顺序寻找最下的结点 把他的内容插入到Lc最后面。
王卓老师的思路就是把La和Lb的每个结点通过比较大小然后再把两条链上的结点依次进行排列,到最后就是相当于是把把La Lb两条链上的东西整合到Lc当中。(其实比我的方法要好!)
附一下代码吧!
这是老师的代码
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
LinkList pa = La->next, pb = Lb->next;
LinkList pc=Lc=La;//等号是从右往左的
while( pa && pb ){
if(pa->date<=pb->date){
pc->next = pa;
pc = pa;
pa = pa->next;
}
else{
pc->next=pb;
pc=pb;
pb=pb->next;
}
}
if(pa) pc->next = pa;
else pc->next = pb;
free(Lb);
Lb = NULL;
}
我的垃圾代码(其实还好啦 只要在main函数里把La Lb销毁了也还行)
Status UnionList(LinkList a,LinkList b,LinkList *c){
LinkList pa=a->next , pb=b->next;
LinkList pc;
int i=LengthList(c)+1;
while(pa&&pb){
if(pa->date>=pb->date) {
ListInsert(c,i++,pb->date);
pb = pb->next;
}
else {
ListInsert(c,i++,pa->date);
pa = pa->next;
}
}
while(pa){
ListInsert(c,i++,pa->date);
pa = pa->next;
}
while(pb){
ListInsert(c,i++,pb->date);
pb = pb->next;
}
return OK;
}