合并两个有序链表

合并两个有序链表

问题

这个题目说的是,给你两个递增排序的链表,你要把它们合成一个链表,并且保持递增排序。另外要求,新链表上的节点使用的就是旧的两个链表上的节点,不能创建新节点。

比如说,给你的两个链表 L1 和 L2,分别是:

L1: 1 -> 3

L2: 2 -> 4 -> 6

合并后的链表就是:

1 -> 2 -> 3 -> 4 -> 6

代码

public class AlgoCasts {

  public class ListNode {
    int val;
    ListNode next;

    ListNode(int x) {
      val = x;
    }
  }

  // Time: O(m+n), Space: O(1)
  public ListNode mergeTwoSortedLists(ListNode l1, ListNode l2) {
    ListNode dummy = new ListNode(0), p = dummy;

    while (l1 != null && l2 != null) {
      if (l1.val < l2.val) {
        p.next = l1;
        l1 = l1.next;
      } else {
        p.next = l2;
        l2 = l2.next;
      }
      p = p.next;
    }

    if (l1 != null) p.next = l1;
    if (l2 != null) p.next = l2;
    return dummy.next;
  }

}

  转载请注明: ForwardXu 合并两个有序链表

 上一篇
链表划分 链表划分
链表划分问题 这个题目说的是,给你一个单链表和一个数字,你要把小于这个数字的节点都移到链表前面,大于等于这个数字的节点都移到链表后面。并且在较小和较大的这两堆节点中,节点之间的相对顺序保持不变。 比如说,给你的单链表是: 0 -> 4 -
2018-12-12
下一篇 
翻转二叉树 翻转二叉树
翻转二叉树问题 这个题目说的是,给你一棵二叉树,你要把它左右镜像翻转,然后返回翻转后的二叉树。 比如说,给你的二叉树是: 1 / \ 2 4 / \ 8 16 左右翻转后的二叉
2018-12-12
  目录