倒序AB链表归并算法(头插法)

倒序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 }

猜你喜欢

转载自www.cnblogs.com/whtmomo/p/11515187.html
今日推荐