【力扣 简单 C】21. 合并两个有序链表

目录

题目

解法一:迭代

解法二:递归


题目

解法一:迭代

cpp 复制代码
struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{
    struct ListNode* virHead = malloc(sizeof(*virHead));
    struct ListNode* preNode = virHead;
    while (head1 && head2)
    {
        if (head1->val < head2->val)
        {
            preNode->next = head1;
            head1 = head1->next;
        }
        else
        {
            preNode->next = head2;
            head2 = head2->next;
        }
        preNode = preNode->next;
    }
    preNode->next = head1 ? head1 : head2;
 
    struct ListNode* retHead = virHead->next;
    free(virHead);
    return retHead;
}
 
struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    return merge(list1, list2);
}

解法二:递归

cpp 复制代码
void swap(struct ListNode** a, struct ListNode** b)
{
    struct ListNode* tmp = *a;
    *a = *b;
    *b = tmp;
}

struct ListNode* merge(struct ListNode* head1, struct ListNode* head2)
{
    if (!head1)
        return head2;

    if (!head2)
        return head1;

    if (head1->val > head2->val)
        swap(&head1, &head2);

    head1->next = merge(head1->next, head2);
    return head1;
}

struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2)
{
    return merge(list1, list2);
}
相关推荐
努力学习的小廉15 分钟前
我爱学算法之—— 分治-快排
c++·算法
未知陨落15 分钟前
LeetCode:77.买卖股票的最佳时机
算法·leetcode
DeeGLMath19 分钟前
排序算法的并行加速实现
算法·排序算法·joblib·sortingx
迎風吹頭髮27 分钟前
UNIX下C语言编程与实践22-UNIX 文件其他属性获取:stat 结构与 localtime 函数的使用
c语言·chrome·unix
迎風吹頭髮27 分钟前
UNIX下C语言编程与实践21-UNIX 文件访问权限控制:st_mode 与权限宏的解析与应用
c语言·数据库·unix
毕设源码-郭学长29 分钟前
【开题答辩全过程】以 PHP茶叶同城配送网站的设计与实现为例,包含答辩的问题和答案
开发语言·php
机器学习之心1 小时前
量子遗传算法是一种将量子计算原理与遗传算法相结合的智能优化算法,代表了进化计算的一个有趣分支
算法·量子计算
Miraitowa_cheems1 小时前
LeetCode算法日记 - Day 59: 字母大小写全排列、优美的排列
java·数据结构·算法·leetcode·决策树·职场和发展·深度优先
岑梓铭1 小时前
《考研408数据结构》第三章(3.1 栈)复习笔记
数据结构·笔记·考研·408
JavaPub-rodert2 小时前
用 go-commons 打造更优雅的字符串处理工具
开发语言·后端·golang