`
ackerman
  • 浏览: 75010 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

带头结点有序单链表的合并

 
阅读更多

typedef int Item;
typedef struct node
{
        Item item;
        struct node *next;
}Node,*List;

void merge1(List la, List lb, List *lc)
{
        Node *pa,*pb,*pc;
        pa=la->next;
        pb=lb->next;
        pc=(*lc)=la;
        while(pa && pb){
                if(pa->item <= pb->item){
                        pc->next=pa;
                        pc=pa;
                        pa=pa->next;
                }else{
                        pc->next=pb;
                        pc=pb;
                        pb=pb->next;
                }
        }
        pc->next=pa?pa:pb;
        free(lb);
}

/*two non-headnode list merge*/
List __merge(List la, List lb)
{
        List lc;
        if(la==NULL)
                return lb;
        if(lb==NULL)
                return la;
        if(la->item <= lb->item){
                lc=la;
                lc->next=__merge(la->next,lb);
        }else{
                lc=lb;
                lc->next=__merge(la,lb->next);
        }

   return lc;
}
List merge2(List la, List lb)
{
        if(la->next==NULL){
                free(la);
                return lb;
        }
        if(lb->next==NULL){
                free(lb);
                return la;
        }
        List lc=malloc(sizeof(Node));
        lc->next=__merge(la->next,lb->next);
        free(la);
        free(lb);
        return lc;
}
 
分享到:
评论

相关推荐

    设ha和hb分别是指向两个带头结点:两个有序链表的合并

    设ha和hb分别是指向两个带头结点的非递减(递增)有序单链表的头指针。要求设计一个算法,将这两个有序链表合并成一个非递增(递减)有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其它存储...

    设ha和hb分别是两个带头结点的非递减有序单链表的表头指针

    设ha和hb分别是两个带头结点的非递减有序单链表的表头指针,试设计一个算法,将这两个有序链表合并成一个非递减有序的单链表。要求结果链表仍使用原来两个链表的存储空间,不另外占用其他的存储空间。表中允许有重复...

    数据结构作业带或不带头结点链表

    - **合并链表**:将两个已排序的链表合并成一个有序链表。 在实现这些功能时,理解和熟练掌握链表的特性至关重要,这将帮助你编写出高效且健壮的代码。同时,良好的编程习惯,如适当的注释和错误处理,也是提升代码...

    小白算法积累——单链表15#2个带头结点单链表+提取公共元素+二表合一

    在解决问题的过程中,我们需要初始化这三个指针,`pa` 指向A链表的第二个节点(因为题目要求带头结点),`pb` 指向B链表的第二个节点,而`pc` 初始指向链表A的头结点。 接下来,我们使用一个`while`循环来遍历两个...

    陈越、何钦铭-数据结构作业2:顺序链表合并

    本题要求实现一个函数,将两个...L1和L2是给定的带头结点的单链表,其结点存储的数据是递增有序的;函数Merge要将L1和L2合并为一个非递减的整数序列。应直接使用原序列中的结点,返回归并后的带头结点的链表头指针。

    数据结构实验——单链表

    2、掌握单链表的插入、删除、查找、求表长以及有序单链表的合并算法的实现 二、实现内容 1、单链表基本操作的实现 在带头结点的单链表h中第i个数据元素之前插入一个数据元素x ,首先需要在单链表中寻找到第i-1个结点...

    【数据结构作业二】写出单链表结点的结构体类型定义及查找、插入、删除算法,并以单链表作存储结。。。 定义线性表节点的结构.pdf

    下面是一个使用单链表实现链表合并的实例: ```cpp void Union(LinkList &La, LinkList &Lb, LinkList &Lc) { LinkList pa, pb, pc; pa = La-&gt;next; pb = Lb-&gt;next; Lc = La; pc = Lc; while (pa && pb) { if...

    单链表实现一元多项式相乘.rar

    在这个场景中,我们关注的是如何使用单链表来实现一元多项式的乘法操作。一元多项式是由变量(通常为x)的幂次和系数组成的数学表达式,如3x^2 + 5x - 2。在编程中,我们通常需要处理多项式的各种运算,包括加、减、...

    链表,建立链表、遍历链表、排序、去重、反转。。。。

    6. **合并链表**:首先创建两个非递减有序链表,然后合并成一个。合并时,比较两个链表的头部节点,将值较小的节点作为新链表的头部,然后继续比较下一个节点,直到一个链表为空,将另一个链表的剩余部分追加到新...

    JAVA单链表的简单操作(递增单链表插入数据,链表逆置,链表逆序合成)

    给定一个按整数值递增排序的带头结点的动态单链表L,我们需要在链表中插入值为x的结点,保持链表的有序性。为了实现这一操作,我们可以遍历链表,找到适当的位置将新结点插入。以下是一个简单的实现: ```java ...

    数据结构实验报告三线性表的链式存储.docx

    // 利用数组初始化带头结点的单链表构造函数 ~LinkList(); int length(); // 求单链表表长 T get(int i); // 获取单链表中第i个结点的值 int locate(T temp); // 定位单链表中某个值的位置 void insert(int i,...

    实验二 单向链表的有关操作.cpp

    1.随机产生或键盘输入一组元素,建立一个带头结点的单向链表(无序)。 2.遍历单向链表。 3.把单向链表中元素逆置(不允许申请新的结点空间)。 4.在单向链表中删除所有的偶数元素结点。 5.编写在非递减...

    数据结构(第二版)习题答案第3章.pdf

    5. **插入操作的时间复杂度**:在一个有序单链表中插入一个新结点,需要遍历链表找到适当的位置,时间复杂度为O(n)。 6. **队列操作**:在不带头结点的单链表中进行删除操作,如果队头结点即为待删除结点,那么队头...

    编写算法依次访问无头结点的单循环链表.doc

    Create_hsllist函数用于创建带头结点的单链表,Union函数用于求两个链表的并集,Intersection函数用于求两个链表的交集。 本文讨论了链表操作的三种算法:编写算法依次访问无头结点的单循环链表、判断带头结点的单...

    数据分析,链表相关复习

    #### 六、归并两个有序单链表 对于两个递增有序的单链表,可以通过比较当前结点的数据值来进行归并。具体过程包括: 1. 创建一个新的链表来保存合并后的结果。 2. 对于两个链表的当前结点进行比较,较小者添加到新...

    单链表的操作实验.zip

    (一)单链表的定义及基本操作 (1)用带表头的链表存放输入的数据,每读入一个数,按升序顺序插入到链表中,链表中允许两个结点有相同...请写出并在计算机上实现将这两个链表合并为一个带头结点的有序循环链表的算法。

    数据结构(第二版)习题答案第3章.doc

    问题(5)中,有序单链表插入新节点并保持有序需要遍历链表,所以时间复杂度为 O(n);问题(6)中,删除操作可能涉及修改队头或队尾指针,具体取决于要删除哪个节点;问题(7)和(10)涉及插入和删除操作的具体实现...

    c++基础练习之链表数据结构.zip

    3. **将两个递增有序单链表A、B归并为一个递减有序单链表.cpp**:这个练习涉及到两个已排序链表的合并,但目标是生成一个降序链表。这需要比较两个链表的节点,每次选取较大的节点添加到结果链表中。 4. **删除...

    线性表算法总结PPT学习教案.pptx

    对于不带头结点的单链表或带头结点的单循环链表,逆置过程类似,但需要特别处理头结点的情况。 3. **有序顺序表的合并**: - 合并两个有序的顺序表通常采用比较元素大小的方式,从两个表的头部开始,将较小的元素...

    数据结构实验报告4.doc

    1. 链表的创建与有序表的合并:通过带头结点的链表表示有序表,输入数据后,使用OrderInsert进行插入,OrderMerge进行合并。 2. 升幂多项式的处理:输入多项式的系数和指数,构造升幂多项式,然后进行相加操作。 四...

Global site tag (gtag.js) - Google Analytics