【数据结构】线性表之单链表(6)(函数功能实现:有序链表的合并)

该篇文章介绍了如何在C语言中实现两个递增有序的链表(linklistH1和linklistH2)的合并,通过intlist_merge函数,将它们合并成一个新的有序链表,同时展示了完整的代码实现和测试过程。
摘要由CSDN通过智能技术生成

问题描述:设两单链表A、B按data值(设为整型)递增有序,将表A和B合并成一表A,且表A也按data值递增有序。

算法思路:

设指针p、q分别指向表A和B中的结点,若p->data ≤q->data则p结点进入结果表,否则q结点进入结果表。
在这里插入图片描述

代码实现:

实现一个功能函数需要三个文件(三个文件在同一目录)。
linklist.h(定义顺序表)
linklist.c(实现接口函数)
test.c(主函数实现)

注:以下函数功能都是在之前发布的完整代码基础上增加函数,故下面代码只放增加的函数代码,其余多余代码不再赘述,其余代码可看往期发布的链表内容。

linklist.h

主要添加定义链表倒置函数int list_merge(linklist H1, linklist H2);

//链表归并
int list_merge(linklist H1, linklist H2);

linklist.c

主要实现链表合并函数int list_merge(linklist H1, linklist H2);

int list_merge(linklist H1, linklist H2){
    linklist p, q, r;

    if (H1 == NULL || H2 == NULL){
        printf("H1 || H2 is NULL\n");
        return -1;
    }

    p = H1->next;
    q = H2->next;
    r = H1;
    H1->next = NULL;
    H2->next = NULL;

    while (p && q){
        if (p->data <= q->data){
            r->next = p;
            p = p->next;
            r = r->next;
            r->next = NULL;
        }
        else{
            r->next = q;
            q = q->next;
            r = r->next;
            r->next = NULL;
        }
    }
    if (p == NULL) {
        r->next = q;
    }else {
        r->next = p;
    }
    return 0;
    return 0;
}

test.c

主函数程序:首先创建两个链表H1,H2,将数组a数组b中的元素通过尾部插入函数list_tail_insert();插入H1和H2,最后通过int list_merge(linklist H1, linklist H2);将H1和H2合并。

#include <stdio.h>
#include "linklist.h"

void test_get();

void test_insert();

void test_delete();

void test_reverse();

void test_adjmax();

int main(int argc, const char *argv[]) {

    linklist H1, H2;
    int a[] = {1, 4, 6, 8,10};
    int b[] = {2, 4, 16, 18,30};
    int i;

    H1 = list_create();
    if (H1 == NULL){
        return -1;
    }

    H2 = list_create();
    if (H1 == NULL){
        return -1;
    }
    for (i = 0; i < sizeof(a)/sizeof(int); i++){
        list_tail_insert(H1, a[i]);
    }
    for (i = 0; i < sizeof(a)/sizeof(int); i++){
        list_tail_insert(H2, b[i]);
    }

    list_show(H1);
    list_show(H2);

    list_merge(H1, H2);
    printf("merge:\n");

    list_show(H1);
    list_show(H2);

    list_free(H1);
    list_free(H2);

    return 0;
}

Clion编译运行

想要用Clion编译运行上述三个文件,需要创建一个CMakeLists.txt文件,文件内容如下:
在这里插入图片描述

运行结果:

在这里插入图片描述
有上述结果可知,两链表实现了合并操作。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值