LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言)

LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言),第1张

概述本文章向大家介绍LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言),主要包括LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言)使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

题目描述:

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

示例:

输入:1->2->4,1->3->4


输出:1->1->2->3->4->4

题目解答:

方法1:直接遍历

申请头结点,方便在后边插入节点。


运行时间4ms,代码如下。

/**

* DeFinition for singly-linked List.

* struct ListNode {

* int val;

* struct ListNode *next;

* };

*/

struct ListNode* mergeTwoLists(struct ListNode* l1,struct ListNode* l2) {

struct ListNode* head = (struct ListNode*)malloc(sizeof(struct ListNode));

struct ListNode* t = head;

while(l1 && l2) {

if(l1->val > l2->val) {

t->next = l2;

l2 = l2->next;

}

else {

t->next = l1;

l1 = l1->next;

}

t = t->next;

}

t->next = (l1 ? l1 : l2);

t = head->next;

free(head);

return t;

}

方法2:递归法

但递归会用栈空间,如果元素太多,会溢出。


运行时间还4ms,代码如下。

/**

* DeFinition for singly-linked List.

* struct ListNode {

* int val;

* struct ListNode *next;

* };

*/

struct ListNode* mergeTwoLists(struct ListNode* l1,struct ListNode* l2) {

if(l1 == NulL)

return l2;

if(l2 == NulL)

return l1;

if(l1->val < l2->val) {

l1->next = mergeTwoLists(l1->next,l2);

return l1;

}

else {

l2->next = mergeTwoLists(l2->next,l1);

return l2;

}

}

总结

以上是内存溢出为你收集整理的LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言)全部内容,希望文章能够帮你解决LeetCode 21. 合并两个有序链表 Merge Two Sorted Lists(C语言)所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存