美文网首页
合并两个排序的链表

合并两个排序的链表

作者: 打工这件小事 | 来源:发表于2018-12-17 21:50 被阅读0次

《剑指offer》面试题25:输入两个单调递增的链表,输出两个链表合成后的链表,当然我们需要合成后的链表满足单调不减规则。

思路一:归并排序的思想(非递归方式)

代码如下:

public ListNode merge1(ListNode list1,ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    } else {
        ListNode node1 = list1;
        ListNode node2 = list2;
        // 确定合并后的新链表的头节点
        ListNode mergeHead = null;
        if (node1.val > node2.val) {
            mergeHead = node2;
            node2 = node2.next;
        } else {
            mergeHead = node1;
            node1 = node1.next;
        }
        // 归并的过程
        ListNode curNode = mergeHead;
        while (node1 != null && node2 != null) {
            if (node1.val > node2.val) {
                curNode.next = node2;
                node2 = node2.next;
            } else {
                curNode.next = node1;
                node1 = node1.next;
            }
            curNode = curNode.next;
        }
        // 有一个链表归并完,另一个链表剩余的节点接上
        if (node1 == null) {
            curNode.next = node2;
        }
        if (node2 == null) {
            curNode.next = node1;
        }
        return mergeHead;
    }
}

思路二:每次比较两个节点的val的大小实际是重复的过程,可以借助递归函数实现。

代码如下:

public ListNode merge2(ListNode list1,ListNode list2) {
    if (list1 == null) {
        return list2;
    } else if (list2 == null) {
        return list1;
    } else {
        ListNode mergeHead = null;
        if (list1.val > list2.val) {
            mergeHead = list2;
            mergeHead.next = merge2(list1,list2.next);
        } else {
            mergeHead = list1;
            mergeHead.next = merge2(list1.next,list2);
        }
        return mergeHead;
    }
}

相关文章

  • 面试题25. 合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例: ...

  • LeetCode题解之合并两个排序的链表

    合并两个排序的链表 题目描述 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增排序的。 示例1:...

  • 25:合并两个排序的链表

    题目25:合并两个排序的链表 输入两个递增排序的链表,合并这两个链表并使新链表中的结点仍然是按照递增排序的 举例说...

  • LeetCode 每日一题 [56] 合并两个排序的链表

    LeetCode 合并两个排序的链表 [简单] 输入两个递增排序的链表,合并这两个链表并使新链表中的节点仍然是递增...

  • leecode刷题(27)-- 合并k个排序链表

    leecode刷题(27)-- 合并k个排序链表 合并k个排序链表 合并 k 个排序链表,返回合并后的排序链表。请...

  • 剑指offer之合并两个排序的列表

    合并两个排序的列表 欢迎关注作者简书csdn传送门 题目   输入两个递增排序的链表,合并这两个链表并使新链表中的...

  • 2018-12-26

    问题列表 合并两个有序链表 合并K个排序链表 合并区间 插入区间 问题与反馈 总结与收获 多个有序链表的合并,类似...

  • 面试题25:合并两个排序的链表

    题目:输入两个递增排序的链表,合并这两个链表并使新链表中的节点依然是排序的

  • [LeetCode OJ]- Merge Two Sorted

    题目要求:合并两个单向已排序的链表l1和l2,返回新的链表。 思路:该问题跟合并两个已排序的数组很像,合并两个已排...

  • 链表

    1 合并两个链表 2 链表判环 并返回入环节点的值 3 两个无环单链表是否相交 4 合并两个有序链表 5 链表排序

网友评论

      本文标题:合并两个排序的链表

      本文链接:https://www.haomeiwen.com/subject/tulhkqtx.html