将两个有序链表head1、head2合成一个有序链表

博客搬家:https://blog.csdn.net/zheyufuck/article/details/53188754

将两个有序链表head1、head2合成一个有序链表,实现的方法有很多中,例如:先将两个链表合成一个,再用排序算法进行排序;或者直接进行比较排序,这里采用的是类似于直接选择排序的方法进行排序

实现程序:

void tomerge(struct list * head1,struct list * head2){

        struct list * ptr = head1->next;
        struct list * last;//指向已排好序链表的最后一个元素
        head1->next = NULL;
        head2 = head2->next;
        last = head1;

        while(ptr != NULL&& head2 != NULL){

                /*将两个链表中最小的链接到新的链表中*/
                if(ptr->data <= head2->data){
                        last->next = ptr;
                        last = ptr;
                        ptr = ptr->next;
                }else{

                        last->next = head2;
                        last = head2;
                        head2 = head2->next;

                }

                last->next = NULL;

        }

        /*将链表的剩余部分链接到已排好序的链表的后面*/
        if(ptr != NULL)
                last->next = ptr;
        else if(head2 != NULL)
                last->next = head2;

}

猜你喜欢

转载自blog.csdn.net/MasterJackal/article/details/80565431
今日推荐