pta 6-5 两个有序链表序列的合并(分数 20)

本题要求实现函数,将两个链表表示的递增整数序列合并为非递减整数序列。需直接使用原序列结点,返回归并后的带头结点链表头指针。解题思路是为新链表开辟新空间,不修改原链表,再按正常链结合并操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目:本题要求实现一个函数,将两个链表表示的递增整数序列合并为一个非递减的整数序列。

函数接口定义:

其中List结构定义如下:

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

裁判测试程序样例:

输入样例:

输出样例:

       由题意可知我们要用两个链表合成一个新链表,而题中说:应直接使用原序列中的结点,返回归并后的带头结点的链表头指针,说明两个链表的链节要“给出”,给出后自身将的“给出”链节将不存在,所以L1,L2最后应该都是NULL,依照这个思路,我们可以给新链表开辟新空间,不能在原来的链表上作修改,明白这个问题后,就可以依照正常的链结合并去做了。

题解代码:

List Merge(List L1, List L2)
{
    //定义两个节点分别指向L1和L2
    List pa = L1->Next;
    List pb = L2->Next;
    //创建新的返回的链表
    List L = (List)malloc(sizeof(struct Node));
    L->Next = NULL;
    List k = L;//尾结点
    List newnode;//新节点
    //当两个链表都是非空的去执行
    while (pa && pb) {
        //新的节点的创建
        newnode = (List)malloc(sizeof(struct Node));
        //赋值
        newnode->Next = NULL;
        //比较大小
        if (pa->Data <= pb->Data) {
            //值都赋值给newnode
            newnode->Data = pa->Data;

            pa = pa->Next;
            //添加到尾部
            k->Next = newnode;
            //更新尾部指针变化
            k = k->Next;
        }
        //同样的道理
        else if (pa->Data > pb->Data) {
            newnode->Data = pb->Data;
            pb = pb->Next;
            k->Next = newnode;
            k = k->Next;
        }
    }
    //当有的链表没有走完,直接进行连接
    if (pa != NULL)
        k->Next = pa;
    if (pb != NULL)
        k->Next = pb;
    //因为直接连接的关系,L1或L2没办法直接走到头,故将L1和L2置为NULL
    L1->Next = NULL;
    L2->Next = NULL;
    return (L);
}

以上就是本题的答案,有帮助的话就请帮忙点个赞吧(拜托了,这对我真的很重要/(ㄒoㄒ)/~~)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值