每日一练

每日一练(14):合并两个排序的链表

2022-01-27  本文已影响0人  加班猿

title: 每日一练(14):合并两个排序的链表

categories:[剑指offer]

tags:[每日一练]

date: 2022/01/27


每日一练(14):合并两个排序的链表

输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。

示例1:

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

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

限制:

0 <= 链表长度 <= 1000

来源:力扣(LeetCode)

链接:https://leetcode-cn.com/problems/he-bing-liang-ge-pai-xu-de-lian-biao-lcof

方法一:迭代

我们的目的是将两个有序链表合并成一个有序链表,因此,我们的每次操作都是获取 l1 指向的结点和 l2 指向的结点中,值较小的结点。迭代和递归都是如此。

使用迭代的时候

使用递归的时候

迭代

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    ListNode *head = new ListNode(0);
    ListNode *ret = head;
    while (l1 != NULL && l2 != NULL) {
        if (l1->val < l2-> val) {
            head->next = l1;
            l1 = l1->next;
        } else {
            head->next = l2;
            l2 = l2->next;
        }
        head = head->next;
    }
    head->next = l1 == NULL ? l2 : l1;
    return ret->next;
}

方法二:递归

编写递归的第一步,应当是明确当前函数应当完成的功能。

函数功能

函数结束条件

ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
    if (!l1 || !l2) {   //链表判空
        return (!l2 ? l1 : l2);
    }
    if (l1->val < l2->val) {
        l1->next = mergeTwoLists(l1->next, l2); //递归
        return l1;
    } else {
        l2->next = mergeTwoLists(l1, l2->next); //递归
        return l2;
    }
}
上一篇下一篇

猜你喜欢

热点阅读