- LinkList mergeLinkedlist(LinkList &L1,LinkList &L2)
- {
- LinkList a=NULL;
- LinkList b=NULL;
- LinkList c=NULL;
- LinkList L;
- GreatList(L);
- a=L1->next; //a指向L1的节点
- b=L2->next; //b指向L2的节点
- c=L; //c指向L的节点
- /*
- *如果L1链表为空,L2链表不为空,直接返回L2的首地址
- */
- if(a==NULL&&b!=NULL)
- {
- L->next = L2->next;
- return L;
- }
- /*
- *如果L2链表为空,L1链表不为空,直接返回L1的首地址
- */
- else if(b==NULL&&a!=NULL)
- {
- L->next = L->next;
- return L;
- }
- /*
- *如果两条链都为空,直接返回一个空指针
- */
- else if(a==NULL&&b==NULL)
- {
- L->next = NULL;
- return L;
- }
- /*
- *否则L1与L2逐一比较,找到值较小的元素,插入到L中
- */
- else
- {
- while(a!=NULL&&b!=NULL)
- {
- /*
- *第一种情况:a指针所指的元素小于与b指针所指向的元素
- */
- if(a->data<b->data)
- {
- c->next = a;
- a = a->next;
- c = c->next;
- }
- /*
- *第二种情况:a指针所指的元素大于与b指针所指向的元素
- */
- else if(a->data>b->data)
- {
- c->next = b;
- b = b->next;
- c = c->next;
- }
- /*
- *第三种情况:a指针所指的元素等于与b指针所指向的元素
- */
- else
- {
- c->next = a;
- a = a->next;
- b = b->next;
- c = c->next;
- }
- }
- if (a!=NULL) //如果a指向的单链表没有插入完,则把剩余的插入到L的后面
- {
- c->next = a;
- }
- if (b!=NULL)//如果b指向的单链表没有插入完,则把剩余的插入到L的后面
- {
- c->next = b;
- }
- return L;
- }
- }
合并两个链表成一个升序链表
最新推荐文章于 2023-02-26 17:52:02 发布