# 小结

# 合并两个有序链表

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

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

var mergeTwoLists = function(l1, l2) {
  if (!l1) {
    return l2;
  }
  if (!l2) {
    return l1;
  }
  var p1 = l1;
  var p2 = l2;
  // 哨兵节点
  var sentinel = { next: null };
  var prev = sentinel;
  while (p1 && p2) {
    if (p1.val > p2.val) {
      prev.next = p2;
      prev = p2;
      p2 = p2.next;
      prev.next = null;
    } else {
      prev.next = p1;
      prev = p1;
      p1 = p1.next;
      prev.next = null;
    }
  }
  prev.next = p1 || p2;
  return sentinel.next;
};

# 两数相加

给出两个非空的链表用来表示两个非负的整数。其中,它们各自的位数是按照逆序的方式存储的,并且它们的每个节点只能存储一位数字。
如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。
您可以假设除了数字 0 之外,这两个数都不会以 0 开头。
示例:
输入:(2 -> 4 -> 3) + (5 -> 6 -> 4)
输出:7 -> 0 -> 8
原因:342 + 465 = 807

var addTwoNumbers = function(l1, l2) {
  if (!l1) {
    return l2;
  }
  if (!l2) {
    return l1;
  }
  var newLink = { val: -1, next: null };
  var curr = newLink;
  var p1 = l1;
  var p2 = l2;
  var temp = 0;
  while (p1 || p2) {
    if (!p1) {
      p1 = { val: 0, next: null };
    }
    if (!p2) {
      p2 = { val: 0, next: null };
    }
    var currSum = p1.val + p2.val + temp;
    temp = 0;
    if (currSum > 9) {
      currSum = currSum - 10;
      temp = 1;
    }
    curr.next = {
      val: currSum,
      next: null
    };
    p1 = p1.next;
    p2 = p2.next;
    curr = curr.next;
  }
  if (temp) {
    curr.next = {
      val: 1,
      next: null
    };
    temp = 0;
  }
  return newLink.next;
};

作者:力扣 (LeetCode)
链接:https://leetcode-cn.com/leetbook/read/linked-list/f217m/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。