数据结构链表(13)——合并两个有序链表

282 阅读1分钟

(一)题目

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

示例 1:

img

输入:l1 = [1,2,4], l2 = [1,3,4]
输出:[1,1,2,3,4,4]

示例 2:

输入:l1 = [], l2 = []
输出:[]

示例 3:

输入:l1 = [], l2 = [0]
输出:[0]

(二)思路及代码

/**
 * Definition for singly-linked list.
 * class ListNode {
 *     val: number
 *     next: ListNode | null
 *     constructor(val?: number, next?: ListNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.next = (next===undefined ? null : next)
 *     }
 * }
 */

function mergeTwoLists(list1: ListNode | null, list2: ListNode | null): ListNode | null {
  let l1 = list1 // 定义新的两个头结点
  let l2 = list2
  let head = {next : null} // 定义新链表的头节点
  let prev = head
  while (l1 && l2){
    if(l1.val<l2.val){
      prev.next = l1
      l1 = l1.next
    }else{
      prev.next = l2
      l2 = l2.next
    }
    prev = prev.next
  }
  if(l1) prev.next = l1 // 排除了为0,null的情况
  if(l2) prev.next = l2
  return head.next
};