倒序AB链表归并算法(头插法)
上一节讲了AB链表归并,不过我们的AB归并用的是顺序归并,这一节我们需要做到如何倒序归并AB链表
我们之前讲了头插法插入的方式是倒序插入,那么头插法是否可以完成这个算法呢,当然可以,这个题的重点也就是这个。
具体步骤我已经写了注释,请大家好好看看
1 //倒序归并A和B为C 2 /* 3 用头插法的方式来完成, 4 */ 5 void merge(LNode *A,LNode *B,LNode *C){ 6 LNode *p = A->next; 7 LNode *q = B->next; 8 LNode *s; 9 C = A; 10 C->next = NULL; //这里的NULL值必须要有 11 free(B); 12 while(p!=NULL && q!=NULL){ //同while(q&&q) 13 if(p->data <= q->data){ 14 s = p; //s = p s游标指向最小的p 15 p = p->next; //p向后移动一位准备下一次比较 16 s->next = C->next; //头插法,将C->next赋值给s->next 17 C->next = s; //C与s建立联系,相当于打上箭头 18 } 19 else{ //同上 20 s = q; 21 q = q->next; 22 s->next = C->next; 23 C->next = s; 24 } 25 } 26 while(p!=NULL){ //这里需要用while循环的原因在于,因为是头插法, 27 s = p; //需要一个个的往前插入 28 p = p->next; 29 s->next = C->next; 30 C->next = s; 31 } 32 while(q!=NULL){ 33 s = q; 34 q = q->next; 35 s->next = C->next; 36 C->next = s; 37 } 38 }