数据结构杂记——两个递增有序的单链表合并

两个递增有序的单链表合并

问题描述:已知两个单链表均已递增有序,试将他们合并成一个链表,保持其有序性。

问题分析:依次比对链表的data,按序排列即可

Linklist Combine_linklist(Linklist ahead, Linklist bhead)           //ahead、bhead 分别表示两个链表的表头结点
{
     Linklist C;                                                    //链表C用来存放最终结果
     C->next=NULL;                                                  //初始化链表C

    //声明三个指针
    LinkNode *pa=ahead->next;                                       //初始时,pa、pb分别指向A表和B表的第一个节点 
    LinkNode *pb=bhead->next;
    LinkNode *pc=C;                                                 //初始时,pc指向C的头结点


    while(pa && pb)                                                 //遍历A表和B表,直到完成其中较短表的遍历
    {
         s=(LinkNode *)malloc(sizeof(LinkNode));                    //申请一个节点,用来存放链表A和B中较小的节点

         //以下开始比较,选取A表和B表的节点中较小的节点,把其值赋给s,
         if(pa->data < pb->data)
        {
             s->data=pa->data;
             pa=pa->next;
        }
        else
        {
             s->data=pb->data;
             pb=pb->next;
        }

        //把s节点‘链’在C表上
        pc->next=s;
        pc=pc->next;
     }

     //退出while循环后,意味着至少有一个链表已被遍历完,只需把较长链表的后续部分‘链’在C表上即可
    if(pa) //如果A表较长
    {
        pc->next=pa;
    }
    else //如果B表较长
    {
        pc->next=pb;
     }

    return C; //C 即为合并后的链表
}



说明:以上代码仅作为参考思路使用,即伪码。

欢迎各位指正,你的一句话可能使我前行一大步!

谢谢!


你可能感兴趣的:(数据结构)