Skip to content

Latest commit

 

History

History
60 lines (45 loc) · 1.19 KB

21.合并两个有序链表.md

File metadata and controls

60 lines (45 loc) · 1.19 KB

题目

将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。

示例:

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

将两个链表的最小值相比较,小的推入result

var mergeTwoLists = function(l1, l2) {
  if (l1 === null) return l2
  if (l2 === null) return l1

  let result = new ListNode()

  let fakeL1 = l1
  let fakeL2 = l2
  let fakeResult = result

  while (fakeL1 || fakeL2) {
    if (!fakeL2 || (fakeL1 && fakeL2 && fakeL1.val < fakeL2.val)) {
      fakeResult.val = fakeL1.val
      fakeL1 = fakeL1.next
    } else {
        fakeResult.val = fakeL2.val
        fakeL2 = fakeL2.next
    }

    if (fakeL1 || fakeL2) {
      fakeResult = (fakeResult.next = new ListNode())
    }
  }

  return result
}

使用递归。将两个链表的最小值相比较,小的改变指向,挂到结尾。

var mergeTwoLists = function(l1, l2) {
  if (l1 === null) return l2
  if (l2 === null) return l1

  if (!l2 || (l1 && l2 && l1.val < l2.val)) {
    l1.next = mergeTwoLists(l1.next, l2)

    return l1
  } else {
    l2.next = mergeTwoLists(l1, l2.next)

    return l2
  }
}