码迷,mamicode.com
首页 > 其他好文 > 详细

21. 合并两个有序链表 (给定两个有序链表,合并成一个)

时间:2020-11-12 13:49:16      阅读:9      评论:0      收藏:0      [点我收藏+]

标签:Golan   语言   UNC   链表   合并   比较   思想   有序链表   返回   

题目

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

示例:

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

来源:力扣(LeetCode)


解答

C语言

通过递归的思想,如果给定的两个链表有一个是空,就返回另一个链表。
如果不空,比较当前链表1、2的第一个值,
如果1的值 <= 2的值,保持1的表头不变,1的next为(1的next组成的链表与2进行合并),最终返回1;
1的值 >= 2的值,保持2的表头不变,2的next为(2的next组成的链表与1进行合并),最终返回2。
依次递归即可。

//          4 ms	5.6 MB
/**
 * 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;
    }else if (l2 == NULL) {
        return l1;
    }else if (l1->val <= l2->val) {
        l1->next = mergeTwoLists(l1->next, l2);
        return l1;
    }else {
        l2->next = mergeTwoLists(l2->next, l1);
        return l2;
    }
}

golang

递归同理,需要注意go语言的空为nil而非NULL

//4 ms	2.6 MB
/**
 * Definition for singly-linked list.
 * type ListNode struct {
 *     Val int
 *     Next *ListNode
 * }
 */
func mergeTwoLists(l1 *ListNode, l2 *ListNode) *ListNode {
    if l1 == nil {
        return l2
    } else if l2 == nil {
        return l1
    } else if l1.Val <= l2.Val {
        l1.Next = mergeTwoLists(l1.Next, l2)
        return l1
    } else {
        l2.Next = mergeTwoLists(l1, l2.Next)
        return l2
    }
}

21. 合并两个有序链表 (给定两个有序链表,合并成一个)

标签:Golan   语言   UNC   链表   合并   比较   思想   有序链表   返回   

原文地址:https://www.cnblogs.com/dar1inge/p/13797003.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!