1. 题目描述
将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。
示例:
输入:1->2->4, 1->3->4输出:1->1->2->3->4->4
2. 解题思路
事实上,处理链表也就是在处理链表之间的指针的关系,这些指针就像是一条线一样,将所有的数据穿在一起,形成了一条链表。
我们只需要每次对两个链表的节点进行对比,然后让当前指针指向相对较小的数,然后将指针指向调整到指向的数的后面,这样依次对比完两个节点,就可以实现两个链表的有序合并。
需要注意的是,我们需要考虑链表长度不同的情况,由于两个链表都是有序链表,如果有一条链表遍历完了,另外一条链表没有遍历完,就直接将没遍历完的部分放在新链表最后就可以了。
3. 代码实现
/*** Definition for singly-linked list.* function ListNode(val, next) {* this.val = (val===undefined ? 0 : val)* this.next = (next===undefined ? null : next)* }*//*** @param {ListNode} l1* @param {ListNode} l2* @return {ListNode}*/var mergeTwoLists = function(l1, l2) {// 定义新链表的头结点let head = new ListNode();// 当前指针指向的节点let cur = head;while (l1&&l2){if(l1.val<=l2.val){// 先指向只较小的节点cur.next = l1// 在将指针的指向移动l1 = l1.next}else{cur.next = l2l2 = l2.next}// 连接好一个节点之后,指针的方向也会移动一位cur = cur.next}// 处理两个链表长度不同的情况cur.next = l1!==null?l1:l2// 返回最后的结果,头指针指向的那个位置,就代表新生成的链表return head.next};
4. 提交结果

