真题描述:将两个有序链表合并为一个新的有序链表并返回。新链表是通过拼接给定的两个链表的所有结点组成的。
示例: 输入:1->2->4, 1->3->4 输出:1->1->2->3->4->4
思路:做链表处理类问题,要把握住一个中心思想——处理链表的本质,是处理链表结点之间的指针关系
/*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/const mergeTwoLists = function(l1, l2) {// 定义头结点,确保链表可以被访问到let head = new ListNode()// cur 这里就是咱们那根“针”let cur = head// “针”开始在 l1 和 l2 间穿梭了while(l1 && l2) {// 如果 l1 的结点值较小if(l1.val<=l2.val) {// 先串起 l1 的结点cur.next = l1// l1 指针向前一步l1 = l1.next} else {// l2 较小时,串起 l2 结点cur.next = l2// l2 向前一步l2 = l2.next}// “针”在串起一个结点后,也会往前一步cur = cur.next}// 处理链表不等长的情况cur.next = l1!==null?l1:l2// 返回起始结点return head.next};
