两个单链表归并为一个按元素值递减次序排列的单链表要求利用原来两个单链表的结点存放归并后的单链表

本文介绍了在链式存储结构中,使用冒泡排序合并两个单链表的过程,详细阐述了排序和连接步骤,并对比了先插入后排序和直接归并的时间复杂度。
摘要由CSDN通过智能技术生成

算法采用存储结构为链式存储结构中的带头结点的单链表;

首先采用冒泡排序算法将两链表进行排序,时间复杂度分别为为O(n12)和 O(n22);后将链表连接时间复杂度为O(n12+ n22),较比之先插入后排序的时间复杂度O((n1+ n2)2)

建立L3结点过程:

归并结点的流程图:

 归并链表实验代码:

void MergeList_L(LinkList& L1, LinkList& L2, LinkList& L3) {

    LinkList p3;
    listSort(L1); 
    listSort(L2);              //对先对L1,L2进行冒泡排序
    LinkList p1 = L1->next;
    LinkList p2 = L2->next;    //p1,p2的初值指向两个表的第一个结点
    L3 = L1;                  //用L1的头结点作为L3的头结点
    p3 = L3;                 //p3的初值指向L3的头结点
     while(p1&&p2){   //L1和L2均到达表尾退出循环,循环体中代码为依次“摘取”两表中较小的结点插入L3的表尾

        if (p1->data <= p2->data) {//if循环内代码为“摘取”p1结点至L3表尾
            p3->next = p1;        // p1所指结点链接到至p3所指结点之后
            p3 = p1;              // p3指向p1
            p1 = p1->next;        // p1指向下一个结点
        }else  {               //else循环内代码为“摘取”p2结点至L3表尾
            p3->next = p2;     // p2所指结点链接到至p3所指结点之后
            p3 = p2;           // p3指向p2
            p2 = p2->next;     // p2指向下一个结点
        } 
     }            
    p3->next = p1 ? p1 : p2;   //将非空表的剩余段插入到p3所指结点之后
    delete L2;                 //释放L2的头结点
}

冒泡排序算法:

//表排序冒泡排序
void  listSort(LinkList& L) {
    if ((L->next == NULL) || (L->next->next == NULL))
    {
        return;
    }
    LinkList head, pre, cur, next, end, temp;
    head=L;
    end = NULL;
    while (head->next != end) {
        for (pre = head, cur = pre->next, next = cur->next; next != end; pre = pre->next, cur = cur->next, next = next->next)
        {
            //相邻的节点比较
            if (cur->data > next->data)
            {
                cur->next = next->next;
                pre->next = next;
                next->next = cur;
                temp = next;
                next = cur;
                cur = temp;
            }
        }
        end = cur;
    }
}

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值