21. Merge Two Sorted Lists

题目描述:

Merge two sorted linked lists and return it as a new list. The new list should be made by splicing together the nodes of the first two lists.

题目翻译

将两个已排序的链表合并为一个新链表,新链表原链表的节点组成。

解题方案

标签: Linked List

思路:

  • 有序链表合并在数据结构里几乎是例题了,正常思路就是逐步遍历两个链表,比较两个节点值的大小,把较大(较小)的节点值尾插到新链表的尾部(next),直到其中某一个链表或者两条链表同时结束。
  • 如果某条链表为空或提前遍历结束,可将另一条链表的所有节点或剩余节点都接到结果链表上,可利用递归实现。

代码:

/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode(int x) : val(x), next(NULL) {}
 * };
 */
class Solution {
public:
    ListNode* mergeTwoLists(ListNode* l1, ListNode* l2) {
        if (l1 == NULL) return l2;
        if (l2 == NULL) return l1;

        if (l1->val > l2->val) {
            ListNode *sol = l2;
            sol->next = mergeTwoLists(l1, l2->next);
        return sol;
        } else {
            ListNode *sol = l1;
            sol->next = mergeTwoLists(l1->next, l2);
        return sol;
        }
    }
};

参考链接:

作者:娄尘哲

results matching ""

    No results matching ""