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

合并两个排序的链表

作者: uzck | 来源:发表于2017-04-03 23:26 被阅读0次

给定两个递增的链表,合并成一个递增链表
如给1 3 52 4 6,合并后该为1 2 3 4 5 6

非递归方法

public ListNode merge(ListNode list1, ListNode list2) {
    if (list1 == null) {
        return list2;
    }
    if (list2 == null) {
        return list1;
    }
    if (list2 == null && list1 == null) {
        return null;
    }

    ListNode newStart, temp, temp2;
    newStart = list1;
    while (list1 != null && list2 != null) { 
        temp = null;
        temp2 = null;
        if (list1.val <= list2.val) {
            while (list1 != null && list1.val <= list2.val) {
                // 如果list2结点的值大于list1,将list1引用向后移
                // 直至list1的值大于list2或者list1为null
                // temp保存list1前面的结点,方便后面的插入操作
                temp = list1;
                list1 = list1.next;
            }
         }
        // temp2指向list2后面的结点
        temp2 = list2.next;
        // 这种情况表示list1指向第一个结点,也就是list1的第一个结点值小于list2第一个节点值
        if (temp == null) {
            list2.next = list1;
            // newStart为新的链表头结点
            newStart = list2;
        } else {
            // list2插入到list1中间
            list2.next = temp.next;
            temp.next = list2;
        }
          // 移动list2指向下一个结点
          list2 = temp2;
      }
      return newStart;
}

递归方法

public ListNode merge(ListNode list1, ListNode list2) {
     if (list1 == null) {
        return list2;
    }
    if (list2 == null) {
        return list1;
    }
    // 如果list1的值小于list2,将list1后面的结点和list2进行合并
    if (list1.val <= list2.val) {
        list1.next = merge(list1.next, list2);
        return list1;
    } else {
        // 否则将list2后面的结点跟list1进行合并
        list2.next = merge(list1, list2.next);
        return list2;
    }
}
   

相关文章

  • 面试题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/jozoottx.html