☰
LeetCode 21|合并两个有序链表(C语言递归实现,数据结构实验)
2026/10/11 4:26:21 网站建设 项目流程

题目描述

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:
输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

解题思路

1. 递归终止条件:如果其中一条链表为空,直接返回另一条链表

2. 比较两个链表当前头节点的值,选取更小的节点作为当前节点

3. 把选中节点的 next 指向剩下链表合并后的结果

4. 返回当前节点,完成拼接

复杂度分析

时间复杂度:O(n+m),n、m为两条链表节点总数,每个节点访问一次

空间复杂度:O(n+m),递归调用栈占用空间

踩坑总结

1. 注意判断链表为空 NULL ,不判断会空指针报错

2. 递归是从上往下拼接,不要搞反节点指向

3. 递归写法适合理解链表,大数据量担心栈溢出可以改用迭代写法

/** * Definition for singly-linked list. * struct ListNode { * int val; * struct ListNode *next; * }; */ struct ListNode* mergeTwoLists(struct ListNode* list1, struct ListNode* list2) { if(list1 == NULL) return list2; if(list2 == NULL) return list1; if(list1->val < list2->val){ list1->next = mergeTwoLists(list1->next, list2); return list1; }else{ list2->next = mergeTwoLists(list1, list2->next); return list2; } }

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询