合并两个有序链表,合并后依然有序

本文介绍了一种合并两个已排序单链表的方法,确保合并后的链表依然保持升序排列。通过迭代方式比较两个链表的当前节点值,选择较小者进行插入操作,直至其中一个链表遍历完毕。

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

//合并两个单链表,合并后依然有序(升序)
ListNode * MergeOrderList(ListNode *list1, ListNode *list2)
{
    //List1是链表一的第一个节点
    ListNode *cur1 = list1;
    ListNode *cur2 = list2;
    ListNode *result = NULL;
    ListNode *tail = NULL;
    ListNode *next;                
    while(cur1 != NULL && cur2 != NULL){
        //取短的链表
            if(cur1->data <= cur->data){
                //取链表一的节点
                if(result != NULL){
                    //结果链表不为空,直接在最后一个节点上做插入
                    //保存链表一的下一个节点,以便于下一次循环的继续
                    next = cur1->next;
                    //插入过程
                    tail->next = cur1;
                    cur1->next = NULL;
                    //保存新的最后一个节点
                    tail = cur1;
                    cur1 = next;
                }
                else{
                    //保存下一个节点,让循环继续
                    next = cur1->next;
                    result = cur1;
                    cur1->next = NULL;
                    //保存新的最后一个节点
                    tail = cur1;
                    cur1 = next;
                }
            }
            else{
                //取链表二的节点
                {
                    if(result != NULL){
                    //结果链表不为空,直接在最后一个节点上做插入
                    //保存链表二的下一个节点,以便于下一次循环的继续
                    next = cur2->next;
                    //插入过程
                    tail->next = cur2;
                    cur2->next = NULL;
                    //保存新的最后一个节点
                    tail = cur2;
                    cur2 = next;
                }
                    else{
                        //保存下一个节点,让循环继续
                        next = cur2->next;
                        result = cur2;
                        cur1->next = NULL;
                        //保存新的最后一个节点
                        tail = cur2;
                        cur2 = next;
                }
        }
}
            //其中的一个链表为空
            if(cur1 == NULL){
                tail->next = cur2;
            }
            if(cur2 == NULL){
                tail->next = cur1;
            }
            return result;
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值